바킹독 0x01 문제2
나의 처참한 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 공부로 만족할래애애애애애애애애