나 개발자 진짜 되냐?

백준 C++ 2920번 음계 ( if문 두번쓰기 ) 본문

C++을 시작해봐요!/구현문제를 알아보아요!

백준 C++ 2920번 음계 ( if문 두번쓰기 )

Snow Rabbit 2026. 2. 3. 02:08

 

ㅇㅅㅇ

문제 쉽다고 난리 쳤는데 

ㅋㅋㅋ

풀수록..? 생각할수록..? 점점 난해해지는 문제..


 

아니 문제를 보며,

아그냥 오름차순이면 이거고

내림차순이면 저거고

아니면 믹스네

이생각하고.. 시작했는데

 

이 글자들을.... 한 글자씩 전에 후에 뭐가 들어갔는지 알아야 하는가..? 에 대해

머리가 복잡해지기 시작했다..

 

그래서 떠올리려고 했던 게..

1. 패턴이 있는가

생각해 보니 8개만 나온 다했으니 8로 해서

for문으로

num [i] = i+1 이 값이 8번 들어있으면 asc인 거고

num [i] = 8-i 이 값이 8번 들어있으면 desc이긴 했다.

 

패턴이 있는 셈

 

2. bool값이 필요하긴 하겠다.

하지만 필요하기만 하다고 생각했지

두 개나.. 필요할지..

뭐.. 한 개인지 뭐 배열인지 전혀 몰랐다는 사실..ㅋ

 

 

기가 막히게 이상하게 푼 문제를 공유한다.

 

그걸 왜 공유할까? 싶긴 한데..

모르겠다 그냥 틀린 답을 왜 적었나 싶긴 한데 ㅋㅋㅋ

 before after만큼 재밌는 게 없긴 하다.

 

처참한 엔딩..

이렇게 하니까 뭐 답이 난리가 난다. mix만 나와야 하는데 앞에 de 이런 것도 같이 나오고

아니 나도 틀린 거 아는데..

어떻게 고쳐야 할지 머리가 하얗게 되는걸요..... 흑흑

 

자,

다음에 답을 공개해 보겠다.

 

1. 변수

 

일단 오름이 내림이 두 개가 다 있어줘야 했다.

그 이유는 밑에 공개

 

하.. 배열 좀 안 썼다고

int n cin >> n num [i] = n 이게 말이 되냐?

나는 진짜 내가 쓰고도 놀랬다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ...

ha.........

정말 걱정이 많다.. 걱정이 많아..

 

조건은 이거 하나다.

한 번이라도 다르면 false로 만들어버리기.

 

사실 가장 헷갈렸던 문제는 여기다

 

사실 나는 여기서 else if로 썼는데..

왜 if문이 두 개어야 하는 걸까..?! else는 안 되나요?!!

 

안된다입니다.

왜냐면 예를 들어서

 

i가 8일 경우

위에 식이 맞지 않아서 asc는 false가 되는데

밑에 식을 읽지 못한다.

그럼 그냥 넘어가고 그다음에 i가 7 이어도

asc만 읽고 false만 남긴 채 밑에 식이 넘어간다.

 

이의 문제점은 사실 desc는 기본값이 참이기 때문에 결국 답은 desc가 나오겠지만

안 읽어서 나온 것이기 때문에 운이 좋아서 답이 나오는 것이다.

 

그래서

두 가지 식을 비교해야 하기 때문에

if문을 두 번 써야 한다.

 

if / else if는

조건이 겹치면 안 되고, 한 번에 딱 한 번만 검사할 때 쓰는 것이다.

 

if / if를 써줘야

조건이 두 개일때 두개 다 실행되면서

검사가 가능하게 된다.

 

그리고 이제 asc가 참이면 asc 출력

desc가 참이면 des 출력

둘 다 아니면 mix 출력

 

한 번이라도 어긋나면 위에 식에 의해 false가 되기 때문에,

 

이렇게 적어줘야 한다.

false가 하나라도 생겼다는 건 123 또는 876이 아니라는 것이기 때문에

mix가 되는 것!

 

전체 답! ㅎㅋ

 

if문 두 번 쓰는 게 생각보다 나에게 어렵게 다가왔다.

어쩔 때 if문을 두 번 써야 하고

아닌지... 헷갈릴 때가 많다.....

 

앞으로 조금씩 나아지길 바란다. ㅎ

 

오늘 배운 것

 

매번 두 개 다 검사해야 하기 때문에 if / if 

하나만 검사해도 되는 거면if / else if