-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
해결됨
1-a문제 two pointer - list 질문입니다.
23.06.09 15:41 작성 조회수 188
0
http://boj.kr/eaeaa929cfea47cea478e58406b544d1
안녕하세요. 예전에 알고리즘을 살짝 공부해서 투 포인터를 써서 array로 풀어보고 list로도 풀어 볼라 하는데 막혀서 질문드립니다.
위 코드를 보면 9개의 입력을 받는 cin반복문이 작동하지 않습니다. line 15까지만 있으면 잘 작동하는데 아래 코드들이 추가되면 안되더라구요.
iterator를 잘못사용한거 같아 3시간 동안 구글링하며 씨름 해봤는데 그래도 모르겠습니다...
참고로 http://boj.kr/ed564ade48bf42768fe37164e175621b 는 array로 짠 코드입니다.
답변을 작성해보세요.
0
큰돌
지식공유자2023.06.09
안녕하세요 태완님 ㅎㅎ
강의에서 설명하지 않은 문제는 답변드리지 않고 있습니다.
강의 내의 있는 문제에 대해 질문주시면 답변드리겠습니다.
감사합니다.
큰돌
지식공유자2023.06.09
안녕하세요 태완님 ㅎㅎ
2309랑 유사하지만 오름차순으로 출력안한다는게 다릅니다.
일단 태완님의 코드를 기반으로 2309를 풀어봤는데요.
이렇게 하시면 됩니다.
처음부터 end()에다가 --를 하지 않고 할당 하시면 됩니다.
#include<bits/stdc++.h>
using namespace std;
list<int> height;
int total = 0;
int main()
{
for(int i = 0; i < 9; i++) {
int h;
cin >> h;
total += h;
height.push_back(h);
}
height.sort();
auto start = height.begin();
auto end = height.end();
end--;
while(total - *start - *end != 100) {
if(total - *start - *end > 100) start++;
else if(total - *start - *end < 100) end--;
}
height.erase(start);
height.erase(end);
for(int i : height) cout << i << '\n';
}
제 생각에는 태완님께서 후위연산자 동작을 착각해서 그러신거 같은데요.
#include<bits/stdc++.h>
using namespace std;
int total = 0;
int main()
{
int a= total--;
cout << a << " : " << total << "\n";
}
// 0 : -1
후위연산자는 다음과 같이 할당이 됩니다.
즉, end에는 자료구조 그 다음 끝 값이 담겨져 있어서 *end자체가 올바른 값이 안들어갔었기 때문에 UB가 뜬 거 같습니다.
다양한 방법으로 공부하시는 것은 매우 좋고 투포인터로 코드도 잘 짠거 같습니다.
감사합니다.
답변 1