나 개발자 진짜 되냐?

백준 C++ 4673번 셀프 넘버 ( while문으로 자릿수 쪼개기) 본문

C++을 시작해봐요!/구현문제를 풀어봤어요!

백준 C++ 4673번 셀프 넘버 ( while문으로 자릿수 쪼개기)

Snow Rabbit 2025. 12. 20. 22:05

 

주말에 문제 푼다고 선포하지 말걸.....

실외에서 일하다 보니까..

추운 곳에서 일하여 다 와서 그런지

어어어어어어 엄청

여름 때보다 훠어어얼씬 피곤하다.

 

그런데 이 문제를 풀려고 하니

눈이 풀릴 수밖에.....................................

 

오늘의 문제 셀프 넘버..

... 정답률이 49 퍼라 해볼 만하다고 생각했다.

그럴 줄 알았다.

.

.

.

 그건 내 착각이었다..


 

신나게 짰다.

 

 

이 식을 디버깅해 보니.. 문제가 발생했다.

 

100까지 셀프넘버는 13개라는데 나는 뭐 30개가 넘었다..

ㅋㅋㅋㅋㅋ

 

그 이유를 봤더니

 

1. 지금 보니까 배열을.. 10000개만 만들어놨는데...
9999이고 막 9 고 이러면 10000이 넘으니까.. 안된다.

 

2. 이제 보니 10000까지 하랬는데 10의 자리랑 1의 자리만 하고 있었다..

 

 

자,

하나씩 해보자.

 

1부터 10000까지 해야 하니까 배열은 최소 10001 개

bool num [10001] = {false}로 선언해주자.

 

그리고 여기서 공통적이게 해 줬던 부분이지만

만들어지는 숫자

( 나는 아까 위에서 ten + one + i )라고 했었다.

 

그렇게 해주는 포인트는 같다.

 

자릿수를 어떻게 하냐면

while문으로 해준다.

 

예전에 한번 한적 있는데..

이제 다시 또 외워야지

 

그 숫자에 대해

while( x > 0)

sum += x %10;

x /=10;

 

 

혼자 풀어보려고 또 열심히... 써봤다.

근데 디버깅했더니 틀렸단다 이유가 뭘까?!

 

다들 알고 있겠지만? 나는 몰랐다.

ㅋㅋㅋㅋㅋㅋ

근데 i를 고쳐버리면 다음에 ++할 때 문제가 생기지 않는가!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

바보!!!!!!!

그래서 i값을 어디에 저장해둬야 한다.

 

흠? 그럼 sum에는 왜 i를 넣어요?

 

왜냐면 아까 내 위에 식에서 보면 one + ten + i

즉 자기 자신에다가 자릿수를 더했다.

그렇기 때문에 sum안에 나 자신을 미리 저장해 두고!

한 자릿수 씩 넣어서 더하는 것이다.

 

 

그리고 가장 중요한 것!!

아까도 말했지만 i가 9999라면

9999+9+9+9+9로

10035가 나온다..

하지만 우리는 10000까지만 하기로 했으니까 10001개를 만든 것이고

저식 그대로 하면..?! 오류가 발생한다! 그래서 조건문을 넣어줘야 한다.

 

 

이렇게!

10000이 넘기 때문에 sum에 조건문이 필요했고,

 

글자수를 자르는 방법인

while문 + %10, /10 넣기

 

잊지 말자!

 

고생했다 토요일!

파이팅 하자 일요일!