강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

namk님의 프로필 이미지
namk

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-J

'맞는데 왜 틀리지'에 대해

작성

·

587

0

안녕하세요. 강의를 통해 알고리즘을 재미나게 공부 중입니다. 감사합니다.

알고리즘을 풀다보면 맞는데 왜 틀리지.. 싶은 속칭 '맞왜틀'들이 있습니다. 이런 경우 오랜 시간 문제를 두고 고민하고, 강의와 강의에서 전개하는 논리, 제 코드의 논리를 비교하며 해결하고 있었습니다.

하지만 최근 혼자 오랜 시간 고민하고 강의와 강의의 논리를 보며 비교해봐도 '맞는데 왜 틀리지'하는 경우가 여러 번 발생하여 '맞왜틀'의 경우 어떠한 식으로 문제를 해결해나가면 좋은지 조언을 구하고자 질문을 올리게 되었습니다.

제가 맞왜틀이라고 고민하게 되는 경우는 공통적으로 전체 논리는 강의와 유사하지만, 그 전개 순서 및 코드 진행의 순서가 다른 경우였습니다.

5주차 개념강의를 설명하시면서 '최초 아이디어가 틀리면 우디르급 다른 방식 접근해보자'라고 하셨지만 큰 틀에서 논리가 동일한 경우 논리 자체가 틀린게 아닌 이상 발상의 전환을 할 생각조차 안 나게되더라구요. 같은 맥락에서 강의의 논리와 코드를 봐도 '맞왜틀'이라는 생각과 함께 실전에서의 자신감?마저 떨어지게 됩니다..

반례 찾는 법을 몇 번 안내해주시긴 했지만 반례를 찾는 다른 팁이나 맞왜틀을 극복하는 팁? 같은게 있다면 조언해주시면 감사하겠습니다 ㅠㅠ.

감사합니다!

 

 

ps 아래는 맞왜틀로 오래 고민했던 대표적인 문제 5-H와 5-J 중 5-J의 코드입니다. (참고용으로 업로드하며 번거로우시다면 제 코드의 어떤 부분이 틀렸다 확인해주지 않으셔도 됩니다!)

강의코드 제 코드 입니다.

아래는 강의코드와 제 코드를 비교하며 사용된 코드의 논리를 정리한 것입니다.

<강의코드>

<제 코드>

 

 

답변 1

2

큰돌님의 프로필 이미지
큰돌
지식공유자

맞왜틀을 풀어가는 것은 생각보다 간단해요.

  1. 불필요한 로직이 있는가.

  2. 반례를 제대로 체크하고 있는가

이 2가지만 신경쓰면 되는데요.

namk님 코드를 잠깐 볼게요.

q.push(t)

이 q는 쓸모가 있을까요?

deque

로 선언을 한 이유가 있을까요?

 

물론 이러한 것을 고친다고 해서 맞왜틀이 바로 풀리지 않을 수도 있죠.

그러나 이런 것들을 지워나가면 정말 깔끔한 코드가 보일테고

뭐랄까 흙탕물에서 바늘을 찾는게 아니라 깨끗한 물에서 바늘을 찾는다는 느낌이 드실거에요.

 

pq를 사용한 아이디어. waitT는 index를 기반으로 한 것. 괜찮은데요.

로직 자체의 우선순위를 좀 고려해 봐야 될 것같아요.

먼저.

멀티탭이 꽉찼는지를 확인하고 >>>>

이렇게 들어가야 되는거 아닐까요?

 

감사합니다.

namk님의 프로필 이미지
namk
질문자

빠르고 친절한 답변 및 조언 감사합니다!

참고하여 공부하도록 하겠습니다 :)

namk님의 프로필 이미지
namk

작성한 질문수

질문하기