C++ 공부

1 minute read

백준 4673번 - 셀프 넘버

사실 백준 문제풀이는 구글에 뒤져보면 깔끔하게 정리해 두신 분들이 많습니다. 그래서 제가 올리는 문제들은 그냥 제가 좀 어려웠다고 느낀 문제나 특별한 이슈가 있었던 것들 위주로 올릴 생각입니다.

BAEKJOON_4673_question 자 이게 오늘 풀어본 문제입니다.

#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;
}

이게 수정해서 제출한 것이고 정답이라고 떴습니다.
그런데 솔직히 아직도 왜 저것 때문에 결과가 다르게 나오는지 잘 모르겠더라구요… 혹시라도 아시는 분 계시면 댓글 달아주시면 감사하겠습니다 :)

BAEKJOON_4673_result

문제 출처 - https://www.acmicpc.net/problem/4673

Tags:

Categories:

Updated:

Leave a comment