https://www.acmicpc.net/problem/1158
*의사코드
1. [1, 2, 3,4,5,6,7] List에 push
2. 2회(k-1)회 만큼 커서++
3. 단, end이면 시작점으로 돌리기
*문제 : 밑에줄에 now=L.erase()가 문제였다.
erase는 다음원소 idx를 반환 -> 끝숫자가 지워지면 now가 end포인터가됨
/*
* 문제 : <1 6 7> 에서
* 7이 지워지면
* now가 end가 됨.
* 해결 : end이면 시작점으로 바꿔주기
*/
if (now == L.end()) {
now = L.begin();
}
* 문제 2 : 문자열문제
str += 1(숫자) 하면 오류가난다.
해결 : str+to_string(1)
string temp = to_string(*now);
ret+= temp;
* 전체코드
#include<bits/stdc++.h>
using namespace std;
int n,k;
list<int> L;
string ret="<";
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
L.push_back(i);
}
auto now = L.begin();
while (L.size()) {
for (int i = 0; i < k - 1; ++i) {
now++;
if (now == L.end()) {
now = L.begin();
}
}
//cout << *now << "\n";
string temp = to_string(*now);
ret+= temp;
ret += ", ";
now=L.erase(now);
/*
* 문제 : <1 6 7> 에서
* 7이 지워지면
* now가 end가 됨.
* 해결 : end이면 시작점으로 바꿔주기
*/
if (now == L.end()) {
now = L.begin();
}
//cout << ret<<"\n";
}
ret.erase(ret.size() - 1);
ret.erase(ret.size() - 1);
ret += ">";
cout << ret;
}
'Algorithm > 연결리스트' 카테고리의 다른 글
[알고리즘] 리트코드 19. 리스트 끝에서 N번째 노드 제거 c++ // 노드탐색 (0) | 2024.07.02 |
---|---|
리트코드 2. 두개의숫자추가 c++ // stoi 주의점, 노드 begin 저장방법, 두 링크드리스트 덧셈방법 (0) | 2024.06.20 |
프로그래머스 표편집 c++ // 연결리스트 직접구현 하는방법, 삽입삭제 되돌리기는 연결리스트(직접구현)! (0) | 2023.11.23 |
백준 5397 cpp// 연결리스트 메모장 (0) | 2023.08.14 |
백준 1406 cpp // 연결리스트 사용법 (0) | 2023.08.14 |