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

김제하님의 프로필 이미지
김제하

작성한 질문수

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

2주차 교안 내용 오류 발견 및 질문

작성

·

131

1

 

Question 1

2주차 이론 블로그 내용에서

내부 노드의 정의가 '루트 노드와 내부 노드 사이에 있는 노드를 뜻합니다.' 로 되어 있는데 여기서 내부노드가 아닌 리프노드가 맞지 않나요?

 

Question 2

2주차 문제 중 10709 기상 캐스터 문제 코드에서 다음 부분 질문입니다.


	for(int i = 0; i < n; i++){ 
		for(int j = 0; j < m; j++){
			if(a[i][j] == 0){ 
				int cnt = 1;
				while(a[i][j + 1] == -1){
					a[i][j + 1] = cnt++;
					j++;
				} 
			}
		} 
	} 

위 코드에서 while 문 내부에서 조건이 계속 만족되면 증가하는데, 인덱스 에러가 발생하지 않는 이유가 궁금합니다.

for (int j = 0; j < m; j++) 

위 for loop 문의 j < m 까지라는 게 내부 while 문까지 적용되는 건가요?

Question3

2주차 문제 4659에서 isVowel을 아래와 같은 방식으로 작성하셨는데요.

bool isVowel(int idx){
	return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u');
}

...

...

if (isVowel(idx))...

 

이를 아래와 같이 문자열로 만들어서 이 내부를 탐색하는 건 어떻게 생각하시나요? 저 위에 isVowel도 결국은 각각 일치하는지 탐색하는 거이지 않나요?

string f = "aeiou";

int main() {
    for (char w : word) {

    if (f.find(w) == string::npos)
        ...
    }
}

답변 1

0

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

안녕하세요 제하님 ㅎㅎ

Question 1

2주차 이론 블로그 내용에서

내부 노드의 정의가 '루트 노드와 내부 노드 사이에 있는 노드를 뜻합니다.' 로 되어 있는데 여기서 내부노드가 아닌 리프노드가 맞지 않나요?

>> 네 맞습니다. 해당 부분 빠르게 수정했습니다. 제 틀린 부분을 말씀해주셔서 감사합니다. ㅎㅎ

위 코드에서 while 문 내부에서 조건이 계속 만족되면 증가하는데, 인덱스 에러가 발생하지 않는 이유가 궁금합니다.

for (int j = 0; j < m; j++) 

위 for loop 문의 j < m 까지라는 게 내부 while 문까지 적용되는 건가요?

>> 음.. 아뇨 for loop와는 무관하게 j++하다가 맵의 범위를 벗어나게 되면 자동으로 0을 참조하게 됩니다. 따라서 -1이 아니게 되고 자동으로 해당 while문은 종료가 되서 에러가 발생되지 않습니다.

#include <bits/stdc++.h>
using namespace std;  
int n, m, a[104][104];
string s; 

앞의 코드처럼 전역변수로 초기화를 했기 때문에 입력받지 않은 부분은 모두 0으로 초기화가 되어있습니다.

 

 

이를 아래와 같이 문자열로 만들어서 이 내부를 탐색하는 건 어떻게 생각하시나요? 저 위에 isVowel도 결국은 각각 일치하는지 탐색하는 거이지 않나요?

string f = "aeiou";

int main() {
    for (char w : word) {

    if (f.find(w) == string::npos)
        ...
    }
}

>> 네 괜찮은 생각입니다. 좋습니다. 시간복잡도도 동일합니다.

 

 

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

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

감사합니다.

강사 큰돌 올림.

김제하님의 프로필 이미지
김제하

작성한 질문수

질문하기