inflearn logo
강의

Course

Instructor

Do it! Algorithm Coding Test with C++

[Two Pointer Practice Problem] Finding Good Numbers (Baekjoon 1253)

문제 8번 질문드립니

305

sharon07176224

2 asked

0

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main() {

ios::sync_with_stdio(false);

cin.tie(0); cout.tie(0);

int N;

cin >> N;

vector<int> save(N + 1 , 0);

for (int i = 1; i <= N; i++) {

cin >> save[i];

}

sort(save.begin(), save.end());

int result = 0;

for (int k = 1; k <= N; k++) {

int s = 1; int e = N;

while (s < e && s >= 1 && e <= N) {

int temp = save[s] + save[e];

if (temp < save[k]) {

s++;

}

else if (temp > save[k]) {

e--;

}

else {

//만약 s와 e가 k와 같아지면 안됨

if (s != k && e != k) {

result++; break;

}

else if (s == k) s++;

else if (e == k) e--;

}

}

}

cout << result << "\n";

}

 

제가 다음과 같이 돌렸을 때 틀렸습니다라고 나오는데, 벡터에 저장할 때 0부터 저장하면 정답이라고 나오는 이유를 모르겠습니다

c++ 코딩-테스트 알고리즘

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

Junseo3456님, 질문하신 내용에 대해 설명드리겠습니다.

C++ STL에서 제공하는 vector는 동적 배열을 제공하며, 0번 인덱스부터 사용하는 것이 일반적입니다. 배열(save)의 인덱스를 0부터 하는 경우가 기본적인 코딩 관례이므로, 대부분의 STL 알고리즘 함수들도 이에 맞추어져 있습니다.

질문하신 코드에서 다음과 같이 벡터의 크기를 N+1로 선언하고, 1부터 N까지 값을 저장하고 있습니다:

vector<int> save(N + 1 , 0);
for (int i = 1; i <= N; i++) {
    cin >> save[i];
}

이렇게 하면 save[0]은 사용되지 않고 남게 되므로, 메모리를 낭비하게 됩니다.

참고로, sort 함수는 벡터의 전체 범위를 정렬하도록 설계되었습니다. 하지만 인덱스를 1부터 사용할 경우, save[0]은 정렬에서 제외되어 잘못된 결과를 초래할 수 있습니다.

따라서 save 벡터를 0번 인덱스부터 사용하여 다음과 같이 코드를 수정하면 좀 더 자연스럽고 예상한 대로 동작하게 될 것입니다:

vector<int> save(N, 0);    // 0부터 N-1까지 사용
for (int i = 0; i < N; i++) {
    cin >> save[i];
}

0번 인덱스부터 값을 저장하여 정렬하면, 모든 값이 예상한 위치에 정렬되어 올바른 결과를 얻을 수 있습니다.

질문하신 코드의 문제는 인덱스를 기준으로 알고리즘을 설계하였지만, 벡터의 관례에 맞지 않게 사용하여 발생한 문제로 보입니다. 인덱스 관리를 보다 정확하게 하여 문제를 해결해보세요.

수강평 이벤트

0

15

2

Reticle이 안나옵니다.

0

5

1

진행 방법 질문드립니다!

0

23

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

18

1

Singleton 관련 질문입니다.

1

27

2

갑자기 채점 사이트가 바뀌었어요

0

19

1

42. [세그먼트 트리 실전 문제] 구간 합 구하기3 (백준 2042)

0

64

1

10986번 질문 있습니다!

0

45

0

LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문

0

119

0

백준 1377 질문있습니다

0

218

1

백준 1722 교재 81 질문

0

330

1

백준11505, 교재 73번

0

282

1

백주 1456번

0

200

1

백준 1325, 교재 47번 문제 질문입니다.

0

358

1

백준 11404 플로이드 문제 질문있습니다.

0

260

1

문제 85번 질문드립니다

0

322

1

백준 13023 질문있습니다.

0

204

1

백준 1876여행 유니온 파인드 질문있습니다.

0

241

1

백준 2251 C++ 질문 있습니다.

0

398

2

퀵정렬 질문

3

291

1

i==k일떄 i++안해도되지않나요

0

436

1

알고리즘 코딩테스트 문제풀이 강의 - 14 절댓값 힙 구현하기 (백준 11286)

0

550

1

알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)

1

573

1

C++은 실전문제에 대한 강의가 없나요? 자바나 파이썬은 있는데 없는거 같아서요.

2

591

2