백준 코드 공부/C언어

백준 1475 : 방 번호 (C언어)

GUuu9 2022. 1. 12. 21:41

문제

1475번: 방 번호 (acmicpc.net)

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net


문제

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

입력

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 필요한 세트의 개수를 출력한다.

예제 입력 1 복사

9999

예제 출력 1 복사

2

예제 입력 2 복사

122

예제 출력 2 복사

2

예제 입력 3 복사

12635

예제 출력 3 복사

1

예제 입력 4 복사

888888

예제 출력 4 복사

6

출처

  • 문제를 번역한 사람: baekjoon
  • 빠진 조건을 찾은 사람: newdeal
  • 문제의 오타를 찾은 사람: waylight3

알고리즘 분류

 


#include<stdio.h>

int main(void) {
    int n, i, top = 1, comp[10] = {0,}, sixnine;
    scanf("%d", &n);
    
    for(i = n; i > 0; i/=10){
        comp[i%10]++;
        if(i%10 != 6&& i%10 != 9 && top<comp[i%10])
            top = comp[i%10];
    }
    
    sixnine = comp[6] + comp[9];
    if(sixnine%2 != 0)
        sixnine++;
    sixnine /= 2;
    
    printf("%d", top>=sixnine?top:sixnine);
}

처음에 n을 문자로 받아서 하나씩 처리하다가 안되서 조건을 살펴보니 입력이 자연수 였음을 알았습니다.

입력 받을 값 n과 각각의 값이 얼마나 들어왔는지 확인할 comp배열을 생성합니다.

for문 안에서 n의 1의 자리에 해당하는 comp 위치의 배열 값을 등장할때마다 1씩 증가 시켜줍니다.

해당 개수가 반복될 수록 구매해야 하는 숫자 셋트가 늘어납니다.

이때 6과 9는 뒤집어서도 사용 가능하므로, 구매해야 하는 top 값을 계산할때 제외하여 줍니다.

총 필요한 top 값을 구하고 난 뒤, 6과 9에 해당하는 갯수를 확인하여 뒤집어 사용할 수 있기 때문에 합하여 2로 나누어줍니다.

마지막 줄에서 top과 sixnine의 값을 비교하여 더 큰 값만큼 숫자 셋트를 구매해야 하므로 둘중 더 큰 값을 출력해 줍니다.

 


Git Hub

BaekJoon-Study/1475.c at C · GUuu9/BaekJoon-Study (github.com)

 

GitHub - GUuu9/BaekJoon-Study

Contribute to GUuu9/BaekJoon-Study development by creating an account on GitHub.

github.com