[CodeTree] 이상한 진수

yseo14·2024년 7월 4일

코딩테스트 대비

목록 보기
14/88


코드트리[이상한 진수]

백준에서만 알고리즘 문제를 풀다가 처음으로 코드트리에서 문제를 풀어보았다.
브론즈1 난이도의 문제인 거 같았다.
알고리즘 분류는 완전탐색이다.

풀이

  1. a에서 한 숫자만 바꿨을 때 나올 수 있는 수를 십진수로 변환하여 Set에 저장한다.
  2. b도 위 방법과 같이 저장한다.
  3. 두 Set을 각각 하나하나 비교하며 값이 같은 수가 있는지 확인하고 그 수를 결과로 출력한다.

코드

package CodeTree;

import java.io.*;
import java.util.*;

/**
 * 이상한 진수
 * a를 한 숫자만 바꾼 모든 경우의 수를 저장한다.
 * b도 마찬가지로 모두 저장한다.
 * a와 b를 각각 대조하면서 맞는 숫자를 찾는다.
 * <p>
 * 문자열로 저장한다.
 */

public class sol1 {
    static String a;
    static String b;
    static Long result;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        a = br.readLine();
        b = br.readLine();

        Set<Long> possibleBinaryNum = possibleBinarySet(a);
        Set<Long> possibleTernaryNum = possibleTernarySet(b);

        for (Long num : possibleBinaryNum) {
            if (possibleTernaryNum.contains(num)) {
                result = num;
                break;
            }
        }
        System.out.println(result);

    }

    public static Set<Long> possibleBinarySet(String binary) {
        Set<Long> possibleNums = new HashSet<>();
        for (int i = 0; i < binary.length(); i++) {
            char[] chars = binary.toCharArray();
            chars[i] = (chars[i] == '0') ? '1' : '0';
            possibleNums.add(Long.parseLong(new String(chars), 2));
        }
        return possibleNums;
    }

    public static Set<Long> possibleTernarySet(String ternary) {
        Set<Long> possibleNums = new HashSet<>();
        for (int i = 0; i < ternary.length(); i++) {
            char[] chars = ternary.toCharArray();
            char originChar = chars[i];
            for (char c = '0'; c <= '2'; c++) {
                if (c != originChar) {
                    chars[i] = c;
                    possibleNums.add(Long.parseLong(new String(chars), 3));
                }
            }
        }
        return possibleNums;
    }
}

리뷰

Set인터페이스와 HashSet 구현체를 사용해보았다.
그리고 parseLong 메서드를 사용해서 문자열로 나타낸 이진수나 삼진수를 쉽게 Long 타입으로 변환할 수 있다는 것을 알게 되었다.

Set

중복되지 않는 요소들의 모음을 나타내는 자료구조

  • 중복을 허용하지 않는다.
  • HashSet: 순서가 존재하지 않는다. 내부적으로 해시테이블을 사용하여 빠른 접근 속도를 보장한다.
  • LinkedHashSet: 요소가 추가되는 순서를 보장한다.
  • TreeSet: 요소들이 자동으로 정렬된 상태로 저장된다.
profile
like the water flowing

0개의 댓글