728x90
반응형
2024.06.19기준 - 실버4
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 조건에 맞게 배열의 자리를 교체해주는 문제입니다.
저의 접근은
1. 먼저 조건을 만족하는지 체크하기 위한 함수를 생성했습니다.
private static void find(int num) {
int sub;
for (int i = 0; i < 7; i++) {
for (int j = i + 1; j < 8; j++) {
if (num == Math.pow(2, i) + Math.pow(2, j)) { // 조건에 만족한다면 키를 서로 교체한다.
sub = arr[i];
arr[i] = arr[j];
arr[j] = sub;
break;
}
}
}
}
조건에 만족한다면 자리를 서로 교체해주는 연산까지 들어가 있습니다.
2. 그 후 해당하는 자리의 번호를 출력해줍니다.
예시 1번으로 설명을 추가하겠습니다.
1. 기존 상태
2, 130이 들어왔을 때, 130 = 2^7 + 2^1, 1번과 7번 교체
3. 72가 들어왔을 때, 72 = 2^6 + 2^3, 6번과 3번 교체
4. 130이 들어왔을 때, 130 = 2^7 + 2^1, 1번과 7번 교체
5. 17이 들어왔을 때, 17 = 2^4 + 2^0, 4번과 0번 교체
6. 96이 들어왔을 때, 96 = 2^6 + 2^5, 6번과 5번 교체
7. 66이 들어왔을 때, 66 = 2^6 + 2^1, 6번과 1번 교체
8. 6이 들어왔을 때, 6 = 2^2 + 2^1, 2번과 1번 교체
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine()); // 명령의 수
StringTokenizer st = new StringTokenizer(br.readLine()); // 명령
int k = Integer.parseInt(br.readLine()); // 정지시키는 키의 번호
arr = new int[8];
for (int i = 0; i < 8; i++) {
arr[i] = i;
}
int num;
while (n-- > 0) {
num = Integer.parseInt(st.nextToken());
find(num);
}
bw.write(Integer.toString(arr[k]));
bw.flush();
bw.close();
br.close();
}
private static void find(int num) {
int sub;
for (int i = 0; i < 7; i++) {
for (int j = i + 1; j < 8; j++) {
if (num == Math.pow(2, i) + Math.pow(2, j)) { // 조건에 만족한다면 키를 서로 교체한다.
sub = arr[i];
arr[i] = arr[j];
arr[j] = sub;
break;
}
}
}
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 28450번 컨벤 데드가 하고싶어요 (0) | 2024.06.21 |
---|---|
BAEKJOON / 백준 - JAVA 31846번 문자열 접기 (0) | 2024.06.20 |
BAEKJOON / 백준 - JAVA 31908번 커플링 매치 (0) | 2024.06.18 |
BAEKJOON / 백준 - JAVA 31925번 APC2shake! (0) | 2024.06.17 |
BAEKJOON / 백준 - JAVA 31924번 현대모비스 특별상의 주인공은? 2 (0) | 2024.06.16 |