본문 바로가기
algorithm/acmicpc

[백준] Num1475 방 번호

by 무대포 개발자 2020. 7. 10.
728x90
반응형

문제

  • 다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
  • 입력
    첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.
  • 출력
    첫째 줄에 필요한 세트의 개수를 출력한다.
  • 예제 입력 1
    9999
  • 예제 출력 1
    2
    다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

    문제풀이

  • 있는 그대로 풀음. 아래 주석 참고.
  • 시간 복잡도 O(n)

왜 문제를 풀지 못했는가? 어떤 부분을 생각하지 못했는가?

  • Source

    public class Num1475 {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String N = scan.next();
    System.out.println(solve(N));
    }
    public static int solve(String N) {
    /**
    * 문제 의미 : 다솜이의 방번호가(N) 주어졌을 때, 플라스틱 숫자로 N 을 만들어라.
    * 단, 6은 9로 , 9는 6으로 변환 가능
    * 한 세트는 0~9 로 이루어짐.
    * 0 <= N <= 1,000,000
    *
    * 1. 숫자를 하나씩 순회하며, map 에 집어넣는다. (map 은 총 10개의 key 를 가지게 됨)
    * 2. 가장 높은 수 만큼 플라스틱 세트가 있으면 됨.
    * 3. 단, 6 또는 9라면 하나씩 뺴줄 수 있다는 것.
    * - 6과 9에 있는 것을 합침. 그런 뒤 나누기 2를 했을 때, 딱 떨어지면 그게 max.
    * - 나머지 1이 나오면 sum / 2 + 1 임
    * 4. 시간 복잡도 O(N) -- N 을 순회하는 것이기에
    */
    int len = N.length();
    int max = 0;
    Map<Character, Integer> map = new HashMap<>();
    char c;
    for (int i = 0; i < len; i++) {
    c = N.charAt(i);
    if (map.containsKey(c)) {
    map.put(c, map.get(c) + 1);
    } else {
    map.put(c, 1);
    }
    }
    /** max 판별 */
    for (char key : map.keySet()) {
    if (key == '6' || key == '9') continue;
    max = Math.max(map.get(key), max);
    }
    /** 6 과 9 는 별도 판단 */
    int val6 = map.containsKey('6') ? map.get('6') : 0;
    int val9 = map.containsKey('9') ? map.get('9') : 0;
    int temp = val6 + val9;
    if (temp % 2 == 0)
    max = Math.max(max, temp / 2);
    else
    max = Math.max(max, (temp / 2) + 1);
    return max;
    }
    }
    view raw Num1475.java hosted with ❤ by GitHub

'algorithm > acmicpc' 카테고리의 다른 글

[백준] 2688 숫자고르기  (0) 2020.07.10
[백준] 1912 연속합  (0) 2020.07.10
[백준] 9249 최장 공통 부분 문자  (0) 2020.07.10
[백준] 5582 공통 부분 문자열  (0) 2020.07.10
[백준] 1780번 종이의 개수  (0) 2020.07.10

댓글