[백준] 2164번: 카드2 C++로 풀어보기

2023. 7. 22. 16:51·Algorithm/Baekjoon(C++)

2164번 설명

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

큐를 사용해서 풀면 될 것 같다.

먼저 큐의 front를 한 번 pop하고,

그리고 임시 변수에 갱신된 큐의 front를 저장하고,

큐의 front를 다시 pop한다.

그리고 임시 변수를 큐에 push한다.(위에 있던 수를 밑으로 옮기는 효과)

 

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


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	queue <int> q;

	int n;
	int temp = 0;
	cin >> n;
	

	for (int i = 1; i <= n; i++) {
		q.push(i); // 카드들을 큐에 넣는다.
	}

	while (q.size() != 1) {
		
		if (!q.empty()) {
			q.pop(); // 맨 위의 카드를 버린다.
		}

		temp = q.front(); // 제일 위의 카드 숫자를 temp에 저장
		
		if (!q.empty()) {
			q.pop(); // 맨 위의 카드를 버린다.
		}
		
		q.push(temp); // temp를 큐에 넣는다.(아까 제일 위에 있었던 카드 숫자)
	}

	cout << q.back();
}

 

결과

2164번 결과

 

메인 아이디어는 틀리지 않았다. 다만 큐가 empty인지 체크를 안하고 pop을 해서 런타임 에러가 난 적이 있기도 했고, 틀림없이 맞다고 생각했는데 왜 자꾸 시간 초과가 나는지 이해가 안 간적도 있었다.

 

밑은 '시간 초과'가 된 코드다.

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


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	queue <int> q;

	int n;
	int temp = 0;
	cin >> n;
	

	for (int i = 1; i <= n; i++) {
		q.push(i); // 카드들을 큐에 넣는다.
	}

	while (true) {
		
		if (!q.empty()) {
			q.pop(); // 맨 위의 카드를 버린다.
		}

		if (q.size() == 1) { // 만약 남은 카드가 한개면
			cout << q.back(); // 남은 카드의 숫자를 출력한다.
			return 0; // 종료
		}
		temp = q.front(); // 제일 위의 카드 숫자를 temp에 저장
		if (!q.empty()) {
			q.pop(); // 맨 위의 카드를 버린다.
		}
		q.push(temp); // temp를 큐에 넣는다.(아까 제일 위에 있었던 카드 숫자)
	}
}

 

정답 처리 된 코드와 차이가 커보이지 않는다. 그렇다면 왜 이 코드만 시간 초과가 된걸까? 아직도 이유는 잘 모르겠다.

(while문의 조건의 차이가 이유라고 추측은 해본다)

 

 

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

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

[백준] 5430번: AC C++로 풀어보기  (0) 2023.07.24
[백준] 3986번: 좋은 단어 C++로 풀어보기  (0) 2023.07.22
[백준] 1874번: 스택 수열 C++로 풀어보기  (0) 2023.07.17
[백준] 5397번: 키로거 C++로 풀어보기  (0) 2023.07.15
[백준] 1919번: 애너그램 만들기 C++로 풀어보기  (0) 2023.07.15
'Algorithm/Baekjoon(C++)' 카테고리의 다른 글
  • [백준] 5430번: AC C++로 풀어보기
  • [백준] 3986번: 좋은 단어 C++로 풀어보기
  • [백준] 1874번: 스택 수열 C++로 풀어보기
  • [백준] 5397번: 키로거 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바