곽로그

[백준 2164] 카드2 본문

알고리즘/백준

[백준 2164] 카드2

일도이동 2020. 1. 20. 22:39
반응형

문제

 

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리

www.acmicpc.net

 

문제풀이

 문제에 나와있는대로 따라가면 된다. 1)제일위에 카드를 버린다. 2) 그 다음 제일 위의 카드를 꺼낸다. 3) 꺼낸 카드를 맨 뒤로 보낸다. 이걸 카드가 하나남을때 까지 반복한다. 

 

주의 해야할 점은 ArrayList로 구현하게되면 시간초과가 난다. 입력이 500,000이기 때문인 것 같은데, LinkedList로 구현하면 된다. 

 

 

보완점

 

 입력값에 따라 ArrayList를 쓸지 LinkedList를 쓸지를 판단해야한다. 여기서 메인 연산은 삭제이다. ArrayList는 내부에 배열로 구현되어있다. 따라서 맨 앞에 있는 elements를 삭제하면 shift연산을 하는데 시간이 오래걸린다. 따라서 삭제에 시간이 안드는 LinkedList로 구현해야한다. 

 

ArrayList

package queue;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Card2 {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int N=in.nextInt();
		
		Queue<Integer> cardList=new LinkedList<Integer>();
		//ArrayList<Integer> cardList=new ArrayList<Integer>();
		for(int i=1;i<=N;i++) {
			cardList.add(i);
		}
		
		while(cardList.size()!=1) {
			cardList.remove();
			int card=cardList.remove();
			cardList.add(card);
		}
		
		System.out.println(cardList.poll());
	}
}

 

 

 

LinkedList

package queue;

import java.util.ArrayList;
import java.util.Scanner;

public class Card2 {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int N=in.nextInt();
		
		ArrayList<Integer> cardList=new ArrayList<Integer>();
		for(int i=1;i<=N;i++) {
			cardList.add(i);
		}
		
		while(cardList.size()!=1) {
			cardList.remove(0);
			int card=cardList.remove(0);
			cardList.add(card);
		}
		
		System.out.println(cardList.get(0));
	}
}

 

 

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1712] 손익분기점  (0) 2020.02.02
[백준 11866] 요세푸스 문제 0  (0) 2020.01.27
[백준 10799] 쇠막대기  (0) 2020.01.19
[백준 1021] 회전하는 큐  (0) 2020.01.12
[백준 10866] 덱  (0) 2020.01.12
Comments