[백준] 5397번: 키로거 C++로 풀어보기

2023. 7. 15. 17:59·Algorithm/Baekjoon(C++)

5397번 설명

어떻게 풀까? (문제를 보고 처음 든 생각)

연결 리스트로 풀면 될 것 같다. STL list를 활용하자.

 

※ STL list 사용법: https://losskatsu.github.io/programming/c-stl-list/#2-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%82%AC%EC%9A%A9%EC%98%88

 

[C언어] C++ STL 리스트(list) 사용법 정리

C++ STL 리스트(list) 사용법 정리

losskatsu.github.io

 

string 배열에 문자열을 입력을 받고

'<'일 때는 iter를 하나 빼고(a.begin()이 아닐 때)

'>'일 때는 iter를 하나 추가하고(a.end()가 아닐 때)

'-'일 때는 erase를 사용하면 될 것 같다.(a.begin()이 아닐 때

 

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


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n;

	cin >> n; // 숫자 입력

	while (n--) {
		string x;
		cin >> x; // 문자열 입력

		list<char> a; // 리스트
		list<char>::iterator iter = a.begin();

		for (int i = 0; i < x.length(); i++) {
			if (x[i] == '<') { // 왼쪽 방향키
				if (iter != a.begin() && !(a.empty())) {
					iter--;
				}
			}
			else if (x[i] == '>') { // 오른쪽 방향키
				if (iter != a.end() && !(a.empty())) {
					iter++;
				}
			}
			else if (x[i] == '-') { // 백스페이스 키
				if (iter != a.begin()) {
					iter--; // 이거 안넣었더니 오류가..
					iter = a.erase(iter);
				}
			}
			else { // 문자열 입력
				a.insert(iter, x[i]);
			}
		}

		for (auto it : a) { // 출력
			cout << it;
		}
		cout << '\n';
	}
}

백스페이스 키에서 iter--;를 넣는 것을 빼먹었더니 계속 오류가 났다.

백스페이스 키를 눌렀을 때는 이전 노드로 iter를 옮겨준 다음 erase를 써야 지워진다.

그냥 iter = a.erase(iter);를 써버리면 현재 노드에는 아무런 값도 써져있지 않으므로 오류가 난다.

(참고로 처음에는 그냥 a.erase(iter);를 써서 이 부분에도 오류가 발생했다..)

 

결과

5397번 결과

출력 초과와 런테임 에러가 발생해서 많이 당황했었다. 위에서 언급한 iter--;와 iter = a.erase(iter); 부분을 찾는 것이 힘들었다.

 

후기

STL list의 활용법을 익힐 수 있어서 좋았다. iterator 활용에 더 익숙해져야겠다는 생각이 든다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Baekjoon(C++)' 카테고리의 다른 글

[백준] 2164번: 카드2 C++로 풀어보기  (0) 2023.07.22
[백준] 1874번: 스택 수열 C++로 풀어보기  (0) 2023.07.17
[백준] 1919번: 애너그램 만들기 C++로 풀어보기  (0) 2023.07.15
[백준] 2609번: 최대공약수와 최소공배수 C++로 풀어보기  (0) 2023.07.13
[백준] 27866번: 문자와 문자열 C++로 풀어보기  (0) 2023.07.13
'Algorithm/Baekjoon(C++)' 카테고리의 다른 글
  • [백준] 2164번: 카드2 C++로 풀어보기
  • [백준] 1874번: 스택 수열 C++로 풀어보기
  • [백준] 1919번: 애너그램 만들기 C++로 풀어보기
  • [백준] 2609번: 최대공약수와 최소공배수 C++로 풀어보기
퀵차분
퀵차분
웹 프론트엔드 개발자를 꿈꾸고 있습니다 :)
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3)
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (20)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript
    KUIT
    typescript
    자바스크립트
    프론트엔드
    인공지능
    next.js
    알고리즘
    음악추천
    백준
    리액트
    오블완
    프로그래머스 자바스크립트
    티스토리챌린지
    프로그래머스
    시스템프로그래밍
    react
    프롬프트 엔지니어링
    HTML
    타입스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[백준] 5397번: 키로거 C++로 풀어보기
상단으로

티스토리툴바