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;
}
그 부분 해결해줬더니 바로 통과돼따