나 개발자 진짜 되냐?

바킹독 0x03 문제5 - 개수 세기 / 백준 10807번 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x03 문제5 - 개수 세기 / 백준 10807번

Snow Rabbit 2025. 9. 24. 23:59

비가 온다 주룩주룩

오늘은 두 문제를 풀어보기로 했다 ㅎㅅㅎ

 

지금은 멈췄다.

날씨가 선풍기를 틀면.. 춥고

끄면 더운 그런 날씨다.

 

이래야 할지 저래야 할지 참 어렵다.

또 환절기라 주변에서 감기환자들이 발생하고 있다.

 

나는 올가을에는 감기에 안 걸리는 게 목표다.

집에 꼼짝 말고 박혀있어야겠다 ㅎㅋ

 

오늘의 문제는 개수 세기

한번 세어볼까나아 ♪


윈도우11로 업그레이드하면서 뭔가 캡처도구가 더 예뻐졌다.

근데 화질이 더 낮아진 거 같아서.. 좀 그렇다 ㅋㅋ

 

여하튼 문제를 보면..

공백으로 나뉘어있고 뭔가 어제 문제보다 쉽다는 생각이 들었다.

 

문제를 풀고 test case 해봤는데

답이 잘 나왔다. 그래서 제출했는데 틀렸다.

 

음..... 뭘까?

아무래도 여기 음수가 마음에 걸리긴 한다.

음수...... int를 쓰면 안 되는 건 알았는데 뭘 써야 할지 잘 모르겠다.

지모씨를 찾아갔다.

 

배열의 인덱스는 음수가 될 수 없다.라고 하셨다.

즉 num [-5]++ 이런 건 없다는 뜻..

 

우리가 -100칸부터 100칸까지 총 200칸을 만들었기 때문에

그냥 0부터 200이라고 생각하고

0부터 100까지 음수를 넣고 101부터 200까지 양수를 넣으면 된다.

즉, num [c+100]을 해주면 된다는 것!

 

음수를 양수로 바꿔서 배열에 저장하는 것,

오프셋

이라고 말한다.

 

그래서 c에도 100을 더하고 v에도 100을 더한 값을 출력해야 한다.

 

하지만 가장 큰 문제는 그곳이 아니었다.

지모씨는 지금 배보다 배꼽이 더 크다며

나를 다그쳤다.

 

열심히 요즘 쓰려고 했던 for ( auto c: a)에서 사고였다.

a의 값을 c로 다 넣어버리는 탓에

0으로 초기화를 다 해주었어서

200개 다 돌아버리다 보니..

만약에 0의 개수를 물으면 100 몇 개가 나오게 된다.

 

그래서 과감하게 없앴다.

그렇게 나의 답이 완성되었다.

뭐든 상황에 맞게 써야 한다는 사실을 알았다..ㅋㅋ

원래 -1로 초기화하는 방법도 있지만 하필 이번엔 음수도.. 포함이라 불가능했다.

-1000을 했으면 괜찮았을.. 지도?

 

아닌가

갑자기 궁금해졌다.

오 해보니까 된다!!

 

하면서 또 하나 배운 점은

int a [108] = {0};

int a[108] = {};

해주면 둘 식 다 108개 배열이 0으로 초기화되는데

0 이외의 숫자를 넣으면

a [0]한테만 들어가게 된다고 한다.

 

그래서 임의의 수를 넣으려면 fill로 해주면 될 거 같다!!

 

오늘 문제 완!