본문 바로가기

전체 글

(94)
1620번: 나는야 포켓몬 마스터 이다솜(Java) 문제가 너무 길어서 핵심적인 부분만 올린다. 그냥 보기에는 HashMap을 사용해서 간단하게 할 수 있어 보였다. 하지만 시간초과가 5번 나오고 정신을 다시 차렸다. 시간복잡도를 줄이고 시간초과에서 벗어나기 위해 Scanner를 사용하던 기존 방식에서 BufferReader와 StringTokenizer를 사용한 방식으로 바꾸고. 시간복잡도를 O(n)으로 줄이기 위해 입력받은 문제가 정수인지 문자열인지 판별하기 위해 Exception을 사용했다. 또한 HashMap한 개를 사용하는 대신 HashMap와 HashMap을 사용해 데이터를 저장했다. 우선 입력을 받았다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri..
10815번: 숫자 카드(Java) 숫자가 너무 커서 이진 탐색을 사용해야 시간제한 내에 풀 수 있을 것 같았다. 우선 상근이의 카드를 입력받은 후 정렬해야 한다(이진 탐색은 정렬이 조건이므로) 이진 탐색에 필요한 변수 몇 개를 포함해 선언하고 입력을 받았다. Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//상근이의 카드 수 int[] card = new int[n];//상근이의 카드 int m;//찾을 카드의 수 int find;//찾을 카드 int low;//최소 index int high;//최대 index int mid;//중앙 index int[] result;//결과 //상근이의 카드를 입력받는다 for(int i = 0; i
2477번: 참외밭(Java) 고민을 많이 했던 문제이다. 반시계 방향으로 돈다는 것에 힌트를 얻었다. 동서남북을 입력할 때 ㄱ, ㄴ 모양의 밭을 순환할 때는 3131(1313) 혹은 4242(2424)가 중간에 오고 ㄱ, ㄴ의 반전 모양의 밭을 순환할 때는 2323 혹은 3232가 중간에 온다는 규칙을 알아냈다. 문제의 예시를 보면 4 2 3 1 3 1 로 3131이 중간에 온다. 위 방법을 통해 문제를 풀기 위해서는 다음과 같은 변수들이 필요하다. Scanner scanner = new Scanner(System.in); int v = scanner.nextInt();//면적 당 참외 int[] width = new int[3];//가로 길이 int[] height = new int[3];//세로 길이 HashSet which =..
1764번: 듣보잡(Java) HashSet과 LinkedList를 사용해 풀었다. 우선 HashSet에 듣도 못한 사람을 저장하고 보도 못한 사람을 입력받음과 동시에 HashSet.contains()를 이용해 듣도 보도 못한 사람이면 LinkedList에 push했다. 출력은 size()와 stream을 사용했다. 우선 듣도 못한 사람들을 입력받는다. Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); HashSet data = new HashSet(); LinkedList result = new LinkedList(); String temp; //듣도 못한 사람 for(int i = 0; i
11478번: 서로 다른 부분 문자열의 개수(Java) 겹치는 문자열이 없게 하기 위해 중복을 허용하지 않는 HashMap을 사용했다. 이중 for문과 substring()을 통해 문자열을 자르고 넣었다. import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); HashSet strSet = new HashSet(); for(int i = 0; i