복대가리의 개발

[C#] 백준 (알고리즘)/브론즈 문제

[백준 - C#] 1284 집 주소

복대가리 2022. 7. 11. 23:04
728x90

문제링크

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

 

1284번: 집 주소

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

www.acmicpc.net

문제

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

조건

시간제한 : 1초
메모리 제한 : 128 MB

입력

호수판에 들어갈 숫자 N의 범위는 1 ≤ N ≤ 9999 이다.

입력은 마지막에 0이 들어오기 전까지 계속해서 줄 단위로 주어진다.

또한, 마지막의 0은 처리하지 않는다.

출력

각 입력마다 얼마만큼 너비를 차지하는지 정수로 출력하면 된다.
각 출력은 줄바꿈으로 구분되어야한다.

 

문제풀이

이번 문제의 경우 주어진 조건들을 파악하여 코드로 변환하기만 하면 되는 문제입니다.

처음에 호수판의 경계와 숫자 사이가 1cm 씩 2개 라서 length에 2를 계속 초기화 해주었습니다.

 

마지막에 각 숫자 사이의 여백까지 생각하여 "총길이 - 1"로 숫자 사이마다 여백을 더해주었습니다.

 

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    int length;
    while (true)
    {
        // 호수판의 경계와 숫자 사이에는 1cm * 2
        length = 2;
 
        string input = reader.ReadLine();
 
        // 입력이 0이면 프로그램 종료
        if (input == "0")
            break;
 
        for (int i = 0; i < input.Length; i++)
        {
            int num = int.Parse(input[i].ToString());
 
            // 1은 2cm / 0은 4cm / 나머지는 3cm
            if (num == 1)
                length += 2;
            else if (num == 0)
                length += 4;
            else
                length += 3;
        }
 
        // 각 숫자 사이에는 1cm 여백 ( 총 갯수 - 1 만큼 )
        length += input.Length - 1;
 
        writer.WriteLine(length);
    }
 
    writer.Close();
    reader.Close();
}
cs
728x90