[백준/C/Python] 1475 - 방 번호

orangesnail·2024년 9월 8일

백준

목록 보기
24/169
post-thumbnail

https://www.acmicpc.net/problem/1475


구현 과정

이 문제에서의 핵심은 6, 9는 숫자를 바꾸어 쓸 수 있다는 것이다. 주어진 방 번호에 6 또는 9가 총 2n개 있으면, 세트를 n개만 써도 되는 것이다. 나머지 숫자들은 중복되는 경우 중복되는 만큼 세트가 필요하다.

방 번호를 int로 입력받은 후 문자열로 바꿔야 하나? 싶었는데 아예 처음부터 문자열로 입력받으면 되는 일이었다! 문자열로 입력받고 정수로 변환하는 것이 더 간단하다.

정리해보자면
0~9를 요소로 가지는, 세트 수를 셀 배열 count 를 선언한 후

  1. 숫자가 6 or 9인 경우 - count[6], count[9] 중 작은 값을 찾고, 그 값을 증가시킨다. 두 개당 하나의 세트가 필요하기 때문이다.
  2. 6, 9외의 다른 숫자인 경우 - count[num]을 1 증가시킨다. 그 숫자를 위해 하나의 세트가 필요하기 때문!

C에서의 구현

int num = n[i] - '0' 로 문자열로 입력받은 배열의 각 요소를 정수로 바꿔준다.

Python에서의 구현

int() 를 이용해 각 요소를 정수로 바꿔준다. 나머지 로직은 동일하며, 맨 마지막에 count 배열에서 최댓값을 구할 때 max() 를 이용해 더 간단하게 구할 수 있다는 차이점이 있다.


전체 코드

C

#include <stdio.h>
#include <string.h>

int main() {
    char n[101];
    scanf("%s", n);

    int count[10] = {0};

    for (int i = 0; i < strlen(n); i++) {
        int num = n[i] - '0';

        if (num == 6 || num == 9) {
            if (count[6] <= count[9])
                count[6]++;
            else
                count[9]++;
        }
        else
            count[num]++;
    }

    int max = 0;
    for (int i = 0; i < 10; i++) {
        if (count[i] > max)
            max = count[i];
    }

    printf("%d\n", max);
    return 0;
}

Python

n = input()
count = [0] * 10

for char in n:
    num = int(char)
    if num == 6 or num == 9:
        if count[6] <= count[9]:
            count[6] += 1
        else:
            count[9] += 1
    else:
        count[num] += 1

res = max(count)
print(res)
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글