Snow Rabbit 2025. 4. 23. 01:47

 

나의 처참한 2번 문제

이해하는데 백만 년 걸렸다.

 

 

사실 제일 이해하기 어려웠던 건

왜 이중포문을 써야 할까였다.

 

이중포문을 언제 쓰는지 알아야 이런 문제에 써먹을 수 있지 않을까?라는 생각을 했다.

 


 

 

 

내 나름 열심히 풀어보고

 

답을 봤다.

 

답은 이중포문? 을 이용하라고 적혀있었다.

 

하지만 나는 왜!!!!

이중포문을 써야 하는지 이해를 못 해서

내 코드로는 안 되는 건가? 싶어 졌고

이건 답이 아닌가.. 싶어서? 출력해보고 싶어졌다.

 

하지만 vs코드 출력하는 방법을 제대로 못 익혀서

그냥 비주얼스튜디오로 할걸 그랬나... 퉤

 

그냥 내 코드를 지선생에게 물어보기로 했다.

 

하지만 지선생은..

내 문제의 심각함을 읊어 주었다.

 

 

 

 

아.... 그니까

문제 자체를 잘못이해했다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

시무룩..

 

그렇게 이중포문을 써야 하는 이유에 대해 알아야 했다.

 

그 또한 나의 친절한 선생

지선생에게 물었다.

 

 

 

이중포문 언제 쓰는 거죠?!

 

쌍, 조합, 관계 따질 때

 

하나를 기준으로, 다른 모든 것과 비교해야 할 때 사용

 

결론 : 배열 안의 모든 두 수의 조합을 확인해야 해서 사용

 

 

 

비교를 할 때는

옆에 있는 친구와 비교해야 해서 i+1이라고 한다.

그리고 두 개를 더했을 때 100이면 return 1 쓰고 탈출!!!

 

return은 함수를 아예 빠져나가기 때문에

else로 return을 쓰면 그 뒤에 계산도 다 못한 채 나오게 될 것..!!

그래서 return은 for문 끝나고 쓰는 게 맞다!

 

반복문 안에서 return는 찾았다! 를 의미

반복문 밖에서 return는 열심히 찾았지만 못 찾았다! 를 의미

 

 

브루트 포스 라고 하던데

완전 탐색 알고리즘이라고 하나보다..

 

 

사실은..

bool함수를 쓰면 시간복잡도가 n이라고 하며..

지선생은 나에게 더한 문제를 풀어보라 했으나..

여러 번 읽어봐도 이해가 잘 안 가서..

 

그래도 일단 적어본다.

 


bool 배열? 

 

핵심은 지금 보고 있는 이 숫자 ( 8 )를 어떠한 수로 ( 92 ) 더하면 100인데

그렇다면 내가 이전에 92가 등장했더라면? 굳이 뒤 애들도 비교할 필요가 없지

 

그럼 우리는

 

1. 지나온 숫자( x )들을 기억해야 하고

2. 다음 숫자를 100- x 해보고 기억한 숫자에 있으면? 된다.

 

이 숫자를 기억하는 용도로 bool을 쓴다.

 

배열 숫자 범위는 0부터 100이라고 했으니, 101칸이 최대이다.

 

그래서 1.

bool seen [101] = {false};

 

아니 c++ 어렵다

그냥 false가 아니라 중괄호를 넣어줘야 한다..ㅋㅋㅋ

모두 false여서 그런가 보다.

어렵다이이이이ㅣㅇ이ㅣ

 

이건 그니까 1부터 100까지 숫자 자체를 넣는 배열이라고 생각하면 된다.

이론상 위에 숫자로 했을 때

8이랑 92는 true가 될 것이다.

 

2.

for문을 돌면서 확인해 본다.

 

변수를 두 개나 만들어야 한다.

나는 변수를 만들지 않고 무모한 도전을 하려고 해서

뭔 말도 안 되는 식이 나왔다.

 

.....

변수를 넣어줘야 한다.

변수..

변수!!!

그래그래!

 

지선생이 3개 더해서 합이 100 인건?이라는 추가질문 할 거냐고 묻길래

그래!라고 했는데

뭔 투포인트녜 뭐녜 배열 어쩌고

나의 머리를 더 아프게 했다.

 

아직 나 그런 거 몰라..

그냥 안 할래

나 오늘 bool 공부로 만족할래애애애애애애애애