본문 바로가기

전체 글

(94)
1302번: 베스트셀러(Java) HashMap을 써서 제목과 입력 횟수를 저장하고 keySet을 순환하면서 최대로 입력받는 제목을 구함과 동시에 사전순으로 제일 빠른 제목을 찾았다. 우선 HashMap을 써서 제목을 입력받을 때마다 몇 번 입력받았는지 Value에 저장했다. Scanner scanner = new Scanner(System.in); String title; HashMap list = new HashMap(); int n = scanner.nextInt(); int max = 1; String result; for(int i = 0; i max) { result = i; max = list.get(i); } else if(list.get(i) == max && i.compareTo(result) < 0) { result ..
1158번: 요세푸스 문제(Java) Queue를 사용해 풀었다. 우선 필요한 변수를 선언하고 데이터를 입력받아 Queue에 넣는다. Queue queue = new LinkedList(); StringBuilder result = new StringBuilder(""); System.out.println(result); 결과 코드 import java.util.*; public class Main { public static void main(String[] args) { Queue queue = new LinkedList(); StringBuilder result = new StringBuilder(""); System.out.println(result); } }
11399번: ATM(Java) 정렬 문제이다. 정렬 후 P1, P1+P2, P1+P2+P3 ....... 을 모두 더하면 된다. 이걸 나열해 보면 if(n = 5) result = P1+ P1+P2+ P1+P2+P3+ P1+P2+P3+P4+ P1+P2+P3+P4+P5 가 되고 이것은 P1*n + P2*n-1 + P3*n-2 + P4*n-3 + P4*n-4 + P5*n-5 을 의미한다. 이걸 반복문으로 나타내면 다음과 같다. for(int i = 0; i
1406번: 에디터(Java) 처음에는 LinkedList로 간단하게 풀 수 있을 거라고 생각했다. BufferedReader와 LinkedList로 풀었는데 계속 시간 초과가 나왔다. 생각해 보니 시간복잡도가 O(n^2)이 나왔다. 시간복잡도를 O(n)으로 줄일 수 있는 방법이 무엇인지 고민하다가 Stack 두 개를 사용하면 삽입, 삭제를 O(1) 만에 할 수 있을 것 같아 Stack 두 개를 사용하기로 했다. left, right 라는 Stack을 두 개 만들고 우선 left에 모든 문자를 넣은 후 커서를 left의 top으로 잡았다. 커서가 왼쪽으로 갈 때마다 right에 left.pop()을 push 하고 커서가 오른쪽으로 갈 때는 left에 right.pop()을 push 하면 된다. BufferedReader br = ne..
1269번: 대칭 차집합(Java) 집합의 원소는 중복되지 않는다. 따라서 HastSet을 사용했다. 우선 집합 A와 B를 HashSet으로 선언한 후, 입력을 받는다 Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//A 집합의 원소 수 int m = scanner.nextInt();//B 집합의 원소 수 HashSet A = new HashSet();//A집합 HashSet B = new HashSet();//B집합 int result = 0;//결과 //입력받는다 for(int i = 0; i