언뜻 볼 때는 재귀 함수를 써야 하나 라는 생각이 들었는데 아무래도 시간이 0.5초 밖에 주어지지 않아서 다른 수학적인 방법으로 접근하면 좋겠다고 생각했다
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] arg) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
a++;
b++;
int re = 0;
int nn = 1;
int i,j;
int knn = 1;
for(i = 0;i<n;i++) {
nn*=2;
}
for(i = 0;i<n-1;i++) {
knn*=4;
}
int kn = nn;
for(i = 1;i<=n;i++) {
if(a > (kn/2) && b>(kn/2)) {//4포지션
re += knn*3;
a-= kn/2;
b-= kn/2;
}
else if(a > kn/2 && b<=kn/2) {//3포지션
re += knn*2;
a-= kn/2;
}
else if(a <= kn/2 && b>kn/2) {//2포지션
re += knn*1;
b-= kn/2;
}
else {//1포지션
}
kn/=2;
knn/=4;
}
System.out.println(re);
}
}
r과 c가 배열 기준으로 (0부터 시작) 입력되어서 내가 보기 편하게 각각 1씩 더해주었다. 그리고 사각형을 4등분 했을 때 왼쪽 위가 1, 오른쪽 위가 2... 이런 식으로 나눠주었고 포지션 별로 결괏값에 수를 더해주었다.
nn과 knn이 완전 다른 변수인데 같은 변수라고 봐서 계속 틀린 답이 나왔다.
알아야 할 점: 더해야 하는 수,.. 등 변수가 여러개일때에는 각각이 어떻게 증가해야 하고 감소해야 하는지 잘 정리하기
다른 사람 코드와 다른 점 : 솔직히 나는 내가 살짝 야매로 푼 줄 알았는데 아니었따! 하나 다른 점은 knn은 kn에서 2만 곱해주면 되는 거였다.
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
백준 [java 자바] 2447번 : 별찍기-10 (0) | 2022.08.12 |
---|---|
백준 [java 자바] 6588번 : 골드바흐의 추측 (0) | 2022.08.12 |
백준 [java 자바] 1946번 : 신입사원 (0) | 2022.08.10 |
백준 [java 자바] 3000번 : 직각 삼각형 (0) | 2022.08.10 |
백준 [자바 java] 11057번 : 오르막 수 (0) | 2022.08.08 |