본문 바로가기

알고리즘/🥈 실버

백준 2164 카드2 자바 풀이

728x90

난이도 : 실버4

풀이일 : 07053

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import java.util.LinkedList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		scan.close();
		
		// queue 요소 추가
		LinkedList<Integer> queue = new LinkedList<>();
		for (int i = 1; i <= N; i++) {
			queue.addLast(i);
		}
		
		// queue 길이가 1이 될 때 까지 문제 조건 반복
		while (queue.size() > 1) {
			queue.pollFirst();
			queue.addLast(queue.pollFirst());
		}
		System.out.println(queue.pollFirst());
	}
}
  • 1~N 까지의 숫자를 링크드리스트로 만든 큐에 추가
  • 큐의 요소가 한 개 남을 때 까지 문제의 조건 반복
  • LinkedList.addLast(temp) : 링크드리스틔 맨 뒤에 temp 요소 추가
  • LinkedList.pollFirst() : 링크드리스트의 맨 앞 요소 제거 및 리턴

느낀점

어제에 이어 링크드리스트 문제를 풀어보았다. 익숙하게 느껴질 때까지 조금 반복하고 넘어가야지.

파이썬에서 큐 문제들을 좋아했어서 괜찮게 느껴지는 것 같기도 한데, 시간 날 때 자료구조들도 하나씩 정리해봐야겠다.

네 달 전에 파이썬으로 풀고 시간초과로 틀렸었던데 지금 한 번에 풀어서 좀 기분 좋은 기록