C언어/백준

[백준 1475] 방 번호

슈슈버거 2023. 8. 17. 00:06

문제

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

 

1475번: 방 번호

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

www.acmicpc.net


내가 작성한 코드

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

int main() {
    int number[10]; //숫자 count할 배열

    for(int i = 0; i<10; i++){ //다 0으로 초기화
        number[i] = 0;
    }

    char room[10]; //방 번호 문자열로 입력받기
    scanf("%s", room);

    printf("%s\n", room);
    return 0;
}

우선 방 번호가 문자로 잘 인식이 되는지 테스트한 코드다

 

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

int main() {
    int number[10]; //숫자 count할 배열

    for(int i = 0; i<10; i++){ //다 0으로 초기화
        number[i] = 0;
    }

    char room[10]; //방 번호 문자열로 입력받기
    scanf("%s", room);

    //문자열 한 개씩 정수로 변환
    for(int i = 0; i<10; i++){
        if(room[i] == NULL){
            break;
        }

        int num = room[i] - '0'; //인덱스로 변환
        number[num]++; //해당 위치 1 증가
    }

    for(int i = 0; i<10; i++){
        printf("%d\n", number[i]);
    }
    return 0;
}

이거는 아스키 코드를 이용해서 문자가 정수로 제대로 변환이 되었는지 확인한 코드다

 

<1차 제출 코드> -- 3%에서 틀림

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

int main() {
    int number[9]; //숫자 count할 배열

    for(int i = 0; i<9; i++){ //다 0으로 초기화
        number[i] = 0;
    }

    char room[10]; //방 번호 문자열로 입력받기
    scanf("%s", room);

    //문자열 한 개씩 정수로 변환
    for(int i = 0; i<10; i++){
        if(room[i] == NULL){
            break;
        }

        int num = room[i] - '0'; //인덱스로 변환
        
        //6과 9는 같은 케이스임을 명심하기
        if(num == 9){
            num = 6;
        }

        number[num]++; //해당 위치 1 증가
    }

    // 6과 9의 케이스 2로 나누어주기
    number[6] = number[6] / 2;

    int max = number[0]; //세트 개수 저장 변수

    for(int i = 0; i<9; i++){ //비교 for문
        if(number[i] >= max){
            max = number[i];
        }
    }

    printf("%d\n", max); //결과값 출력
    return 0;
}

문제상에 나와있는 테스트케이스는 다 통과했는데... 뭐가 문제지?

9696969가 문제다!! 4가 나와야하는데 소수점 부분을 버리게 되니까 3이 나오더라

1을 더하고 2로 나누는 식으로 바꿔야겠다

 

<2차 제출 코드> -- 정답

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

int main() {
    int number[9]; //숫자 count할 배열

    for(int i = 0; i<9; i++){ //다 0으로 초기화
        number[i] = 0;
    }

    char room[10]; //방 번호 문자열로 입력받기
    scanf("%s", room);

    //문자열 한 개씩 정수로 변환
    for(int i = 0; i<10; i++){
        if(room[i] == NULL){
            break;
        }

        int num = room[i] - '0'; //인덱스로 변환
        
        //6과 9는 같은 케이스임을 명심하기
        if(num == 9){
            num = 6;
        }

        number[num]++; //해당 위치 1 증가
    }

    // 6과 9의 케이스 2로 나누어주기
    number[6] = (number[6] + 1) / 2;

    int max = number[0]; //세트 개수 저장 변수

    for(int i = 0; i<9; i++){ //비교 for문
        if(number[i] >= max){
            max = number[i];
        }
    }

    printf("%d\n", max); //결과값 출력
    return 0;
}

그 부분 해결해줬더니 바로 통과돼따