본문 바로가기

전체 글

(98)
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
2563번: 색종이(Java) 색종이가 겹치는 경우의 수는 너무 많아서 그냥 도화지를 만들고 한칸씩 칠해나가는 방법으로 문제를 해결했다. 2차원 배열로 도화지를 만들고 좌표를 입력받을 때 마다 두 좌표의 + 10 범위를 돌면서 칠해져 있지 않다면 칠하고 넓이를 1씩 증가시켰다. import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int area = 0;//넓이 int x, y;//입력받을 좌표 boolean[][] paper = new boolean[101][101];//도화지 for(int i = 0; i