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

문희석님의 프로필 이미지
문희석

작성한 질문수

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

2-T

오큰수

작성

·

305

0

큰돌님 강의 잘 보고 있습니다.

 

오큰수를 풀다가 궁금한 점이 생겨 질문 드립니다.

저는 배열을 하나만 생성하고 stack에 직접 값을 넣으면서 풀이에서 막혔었는데요 스택을 써야 한다는 거까지는 떠올렸지만 스택에 인덱스를 넣고 a라는 배열을 새로 만들어 거기다 실제 값을 넣어야겠다라는 생각이 이어지질 않았습니다.

 

문제를 보고 어떤 부분에서 배열을 새로 만들어야겠다라는 판단을 해야 할까요? 괄호 문제 같은 경우 그냥 그대로 넣어버려서 쉽게 풀었지만 오큰수 문제의 경우 배열을 새로 만들고 거기에 실제 값을, 스택에는 인덱스를 넣어야겠다라는 유기적인 생각이 안 떠올라서 질문 드려봅니다.

답변 1

1

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

안녕하세요 물코딩님 ㅎㅎ

문제를 보고 어떤 부분에서 배열을 새로 만들어야겠다라는 판단을 해야 할까요? 괄호 문제 같은 경우 그냥 그대로 넣어버려서 쉽게 풀었지만 오큰수 문제의 경우 배열을 새로 만들고 거기에 실제 값을, 스택에는 인덱스를 넣어야겠다라는 유기적인 생각이 안 떠올라서 질문 드려봅니다.

>> ret이란 배열을 만든 거 말씀이신거죠?

예를 들어볼게요. ㅎㅎ

이문제는요.

3 2 1 4 이렇게 되어있을 때 3 2 1 의 오큰수는 4가 되는거죠.

3 2 1 ... 이렇게 진행될 때 "오큰수"가 어떤 건지는 모릅니다.

다만, 오큰수가 오른쪽에 있는 것은 자명한 사실이죠.

이럴 때는 이를 담아 두어야 합니다. stack에 담아 두고.

어떠한 로직을 기반으로 오큰수를 만나면 담아 뒀던 값을 끄내면서

이 위치에 있던 녀석은 이게 오큰수야! 라고 하면서 정답 배열을 담아 놓는 것이죠.

 

어떻게 이런 생각이 나왔냐?

일단 이점은 짚고 넘어갈게요.

  • ret이라는 배열을 쓴 이유는 그저 정답을 담아놓는 바구니 역할입니다.

  • stack이 더 중요합니다.

생각의 플로우는 다음과 같습니다.

이 문제의 예시를 보고 오큰수를 "설정"할 때

3 2 1 >>>> 4 할 때!!!

3, 2, 1의 오큰수 = 4 이렇게 설정하잖아요?

  • 종이에 이 문제의 예시를 들면서 이해할 때 이렇게 이해하는 걸 생각하면 됩니다.

이러한 게 코드에 들어간 겁니다.

3, 2, 1 을 생각에 넣고 있다가 >>> 4가 등장하면 오큰수 설정

라는 생각이!!

3, 2, 1 을 stack에 넣고 있다가 >>> 4가 등장하면 ret이란 배열에 오큰수 설정

이렇게 되는 것이죠.

생각의 흐름을 효율적인 코드로 바꾸시면 됩니다.

막 ~~할 때 새로운 배열을 만든다 stack을 만든다는 없는 거 같아요.

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

문희석님의 프로필 이미지
문희석
질문자

a라는 배열을 말씀드린 거긴 한데 말씀해 주신 거랑 같은 원리인 거 같아서 답변이 도움 됐습니다! stack과 a 배열을 세트로 보고 ret을 따로 봐야 되는 거군요 질문도 엉성했는데 답변 감사합니다!

문희석님의 프로필 이미지
문희석

작성한 질문수

질문하기