inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코딩테스트 실전 모의고사(with C++) : 대기업 대비

4. 모든 쌍의 괄호 코드 해설(DFS)

선생님, 질문이 있습니다.

해결된 질문

134

celestial_

작성한 질문수 72

0

별 내용은 아닌데 사실

선생님 아이디어와 동일하게 코드 구성을 하였는데요

DFS재귀 매개변수에 string a를 넣는데

다음 트리로 넘어갈 때 저는 

DFS(s+1,e,a+='(')

DFS(s,e+1,a+=')')

이렇게 += 연산자를 활용해보았는데요 당연히 구상할 때 부터 

문자열을 더해나가야만 종착점에 도달하였을 때 매개변수로 넘어온 a를 출력한다고 생각했는데 

그게 아니라 a+'(' a+')'인 이유가 무엇인지 궁금합니다ㅜㅜㅜ

그리고 string 자료형에서 push_back이 

파이썬에서의 append와 개념상 동일한 기능을 한다고 봐도 되나요?

감사합니다. 

코테 준비 같이 해요! C++

답변 1

0

김태원

안녕하세요^^

a+='('와 같이 미리 a의 값을 바꾼 다음 매개변수에 전달하면 재귀함수가 뒤로 백을 했을 때 '('를 추가하지 않은 값으로 되돌아 와야 하는데 백을 해도 '('가 추가된 값 그대로 있습니다.

DFS(s+1, e, res+='(');

cout<<res<<endl;

DFS(s, e+1, res+=')');

위에 코드처럼 짜고n=3을 입력하면 정상적인{ res+'(' } 코드는 (((에 )를 추가해 ((()처럼 진행하지만

위에 코드는 ((((에  )를 추가해 (((()럼 진행할 겁니다. 즉 ((((에서 if(s>n)에 걸려들어 바로 끝나고 뒤로 백을 해 res의 값이 (((으로 되돌아 와야 하는데 되돌아오지 않는 것입니다.

위에 코드처럼 하고 중간위치에서 한 번 출력해보세요. 확인할 수 있을 겁니다.

조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부

0

457

1

최악의 경우 연산 질문이 있습니다.

0

411

1

로컬 환경과 다르게 오답이라고 나와서 문의 드립니다.

0

302

1

6강 3번 정사각형 그리키 코드 질문 드립니다.

0

242

1

1-5 효율적인 공부 dy를 시간(N)으로 하는 풀이 질문

0

320

1

반복수와 시간초 계산을 어떻게 하나요??

0

333

1

왜 DP로 풀어야하는지 궁금합니다

0

242

1

선생님 안녕하세요. 다른 풀이에 대한 질문이 있습니다.

0

223

1

문제 해결방법에 대한 질문이 있습니다.

0

245

0

바둑대회 코딩 질문

0

270

1

6분 11초에서 dis [0][][]3차원 격자판이있는데요. 격자판안에 숫자는 문제에 없던데 어떻게 구해지는건가요?

0

200

0

실전모의고사 5회 1번 패턴찾기 질문있습니다.

0

220

1

전역변수관련 질문입니다.

0

255

1

5-1 패턴찾기 문제 질문드립니다.

0

218

1

오렌지 나무 문제 질문드립니다

0

310

1

코드 한번 봐주시면 감사하겠습니다!

0

175

1

코드 한번 봐주시면 감사하겠습니다!

0

234

1

코드 한번 봐주시면 감사하겠습니다!

0

198

1

시작점의 ch

0

204

1

vector에서 질문이 있습니다~!

0

235

1

그대로 따라했는데 시간 초과가 나왔습니다

0

161

1

2회 모의고사 4번 숲속의 기사 코드 질문이 있습니다.

0

288

1

질문있습니다.

0

209

1

이렇게 풀면 반례가 어떻게되나요?

0

245

1