백준/브론즈3

[Python/C] 백준 1284 - 집 주소

두부마라탕 2025. 4. 17. 15:18

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


문제

재석이는 대문에 붙이는 (주소를 나타내는) 호수판 제작업체의 직원이다. 고객에게 전달할 호수판은 숫자와 숫자 사이 그리고 왼쪽 오른쪽으로 적당히 여백이 들어가 줘야하고 숫자마다 차지하는 간격이 조금씩 상이하다. 다행이도 규칙은 매우 간단하다. 

  1. 각 숫자 사이에는 1cm의 여백이 들어가야한다.
  2. 1은 2cm의 너비를 차지해야한다. 0은 4cm의 너비를 차지해야한다. 나머지 숫자는 모두 3cm의 너비를 차지한다.
  3. 호수판의 경계와 숫자 사이에는 1cm의 여백이 들어가야한다.

예를 들어 120 같은 경우,  각 숫자 사이에 여백이 1cm 씩 2개 들어간다. 1은 2cm, 2는 3cm, 0은 4cm를 차지한다. 오른쪽, 왼쪽 경계에서 각각 여백이 1cm씩 차지한다. 따라서 총 2 + 2 + 3 + 4 + 1 + 1 = 13(cm) 가 된다.

재석이는 고객에게 전달해야할 호수판의 너비가 얼마나 되는지 궁금해졌다. 재석이를 도와주자!

 

[Python] 코드

while True:
    num = input()
    if num == "0":
        break
    total = 1
    for i in num:
        if i == '0':
            total += 4
        elif i == '1':
            total += 2
        else:
            total += 3
        total += 1
    print(total)

 

풀이

1. 입력으로 0이 들어오면 종료

2. total = 1 : 앞 쪽의 1cm 두고 시작한다.

3. 입력된 각 숫자마다의 너비를 더해주고 숫자 뒤의 1cm도 더해준다.

4. 그리고 나온 총 너비를 출력한다.

 

[C] 코드

#include <stdio.h>

int nums(int num) {
    if (num == 0) return 4;
    if (num == 1) return 2;
    return 3;
}

int total(int num) {
    int w = 1;

    while (num > 0) {
        int tmp = num % 10;
        w += nums(tmp) + 1;
        num /= 10;
    }
    return w;
}

int main() {
    int num;

    while (1) {
        scanf("%d", &num);
        if (num == 0) break;
        printf("%d\n", total(num));
    }
    return 0;
}

 

풀이

1. nums 함수 : 0일 때 4 반환, 1일 2 반환, 나머지 3 반환

2. total 함수

  2-1. w = 1의 경우 맨앞의 1cm를 포함한 값

  2-2. 숫자의 나머지를 구해 1자리씩 너비를 더한다. 그리고 뒤에 숫자 뒤의 1cm도 더해준다.

  2-3. 다음 자리 숫자를 구하기 위해 10으로 나눠준다.

  2-4. 그렇게 나온 숫자의 너비값을 반환

3. main 함수 : 숫자를 입력받아 0이면 멈추고 아니면 total함수를 돌려 반환된 값을 출력한다.