• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

이 코드는 왜 YES만 Success인가요?

24.03.16 15:41 작성 조회수 71

0

안녕하세요.
선생님.

영상도 참고하면서 제 방식대로 조금 짜봤는데 잘 안되서 여쭤봅니다.

#include <bits/stdc++.h>
using namespace std;

int n, res = 0;
int a[101];
int main() {
	
	cin >> n;
	vector<int> ch(n);
	for(int i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	for(int i = 0; a[i]!='\0'; i++) {
		res = abs(a[i]-a[i+1]);
		if( res > 0 && res < n && ch[res] == 0 ) {
			ch[res] = 1;
		}
	}
	               // 이 부분입니다.
	for(int i = 0; ch[i] != '\0'; i++) {
		if(ch[i] == 0) {
			cout << "NO";
			return 0;
		}
	}
	
	cout<<"YES";
	
	return 0;
}

3번째 for문에서 i < n을 하면 NO부분에서만 success가 뜨고 위와 같이 하면 Yes부분에서만 Success가 뜹니다.

도움부탁드리겠습니다.

감사합니다.

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요^^

'\0' 으로 끝지점을 정하는 탐색은 문자열을 탐색할 때 그렇게 합니다. 배열을 탐색할 때는 배열의 길이로 탐색을 하세요.

세 번째 for문은 0부터가 아니라 1부터 시작해야 합니다. ch[0]값은 무조건 0입니다.

아래 코드는 위 코드를 수정한 코드입니다.

#include <bits/stdc++.h>
using namespace std;

int n, res = 0;
int a[101];
int main() {
	
	cin >> n;
	vector<int> ch(n);
	for(int i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	for(int i = 0; i < n - 1; i++) {
		res = abs(a[i]-a[i+1]);
		if( res > 0 && res < n && ch[res] == 0 ) {
			ch[res] = 1;
		}
	}
	               // 이 부분입니다.
	for(int i = 1; i < n; i++) {
		if(ch[i] == 0) {
			cout << "NO";
			return 0;
		}
	}
	
	cout<<"YES";
	
	return 0;
}

 

오 선생님 감사합니다. 즐거운 일요일 되세요!!!