코드굽는 타자기

SWEA[4366] - 정식이의 은행업무[D4] 본문

알고리즘/완전탐색

SWEA[4366] - 정식이의 은행업무[D4]

bright-jun 2020. 5. 2. 01:15

링크

SWEA[4366]

문제설명

  • 2진수 모든자릿수 경우∩3진수 모든자릿수 경우

문제풀이

  • HashSet으로 ∩ 검사

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Solution4366_정식이의_은행업무 {

    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("res/swea/4366.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int T=Integer.parseInt(st.nextToken());
        for (int test_case = 1; test_case <= T; test_case++) {
            char[] bins = br.readLine().toCharArray();
            char[] tris = br.readLine().toCharArray();
            long ans = 0;
            HashSet<Long> hs = new HashSet<Long>();

            for (int i = 0; i < bins.length; i++) {
                char mem = bins[i];
                bins[i] = mem=='0'?'1':'0';
                hs.add(Long.parseLong(new String(bins), 2));
//                System.out.println(new String(bins));
                bins[i] = mem;
            }
            top:
            for (int i = 0; i < tris.length; i++) {
                char mem = tris[i];
                for (int j = 0; j <= 2; j++) {
                    if(tris[i] != (char)(j+'0')) {
                        tris[i] = (char)(j+'0');
                        if(hs.contains(Long.parseLong(new String(tris), 3))) {;
                            ans = Long.parseLong(new String(tris), 3);
                            break top;
                        }
//                        System.out.println(new String(tris));
                        tris[i] = mem;
                    }
                }
            }

            System.out.println("#"+test_case+" "+ans);
            /*
             * 초기화
             */
        }//end test_case
    }//end main
}

아쉬운점

  • int to char
    • 1 - '0'으로 생각함
    • '1' - '0' = (int)1 이고
    • 1 + '0' = (char)'1' 임

잘한점

  • HashSet 이용
  • N진수 변환 메소드 사용했음
    • 직접 구현해보는것도 필요할 듯
Comments