본문 바로가기
알고리즘/백준 문제풀이

백준 [java 자바] 1074번 : Z

by 잔디🌿 2022. 8. 11.

    언뜻 볼 때는 재귀 함수를 써야 하나 라는 생각이 들었는데 아무래도 시간이 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만 곱해주면 되는 거였다.