C++ 공부
백준 4673번 - 셀프 넘버
사실 백준 문제풀이는 구글에 뒤져보면 깔끔하게 정리해 두신 분들이 많습니다. 그래서 제가 올리는 문제들은 그냥 제가 좀 어려웠다고 느낀 문제나 특별한 이슈가 있었던 것들 위주로 올릴 생각입니다.
자 이게 오늘 풀어본 문제입니다.
#include <iostream>
int SelfNum(int val){
int result = val;
while(val != 0){
result += val%10;
val /= 10;
}
return result;
}
int main(void){
bool Array[10001];
for(int i=1; i<=10000; i++){
if(SelfNum(i)<=10000){
Array[SelfNum(i)] = true;
}
}
for(int i=1; i<=10000; i++){
if(Array[i]==false){
std::cout << i << "\n";
}
}
return 0;
}
이게 제가 처음 제출한 내용이고 오답이라고 떴습니다. 9960이랑 9971이 출력되지 않더군요.
아무리 생각해봐도 틀린 이유를 알 수 없어서 구글에서 좀 찾아봤고 저랑 똑같은 방법으로 푸신 분이 있으셔서 그분 것을 따라서 하나씩 바꿔봤습니다.
bool Array[10001]
그 결과 이 친구가 문제라는 걸 찾았습니다. 얘가 바깥으로 나가야 하더군요.
#include <iostream>
#define N 10001
bool Array[N];
int SelfNum(int val){
int result = val;
while(1){
if(val == 0) break;
result += val%10;
val = val/10;
}
return result;
}
int main(void){
for(int i=1; i<N; i++){
int idx = SelfNum(i);
if(idx <= N){
Array[idx] = true;
}
}
for(int i=1; i<N; i++){
if(Array[i]==false){
std::cout << i << "\n";
}
}
return 0;
}
이게 수정해서 제출한 것이고 정답이라고 떴습니다.
그런데 솔직히 아직도 왜 저것 때문에 결과가 다르게 나오는지 잘 모르겠더라구요… 혹시라도 아시는 분 계시면 댓글 달아주시면 감사하겠습니다 :)
문제 출처 - https://www.acmicpc.net/problem/4673
Leave a comment