목록Algorithm (111)
Sunrise
해시맵 문제입니다. 받은 전화번호들 중에서 한 번호가 다른 번호의 접두사가 되면 false 그렇지 않으면 true 입니다. "12", "123" → false "123", "456" → true 중복되는 번호가 없으므로 해시맵에 받아서 containsKey() 사용 containsKey("A") → 해시맵에 "A"가 있으면 true, 없으면 false 반환 substring(i, j) → 0번째부터 j번째까지 자른 문자열 import java.util.*; class Solution { public boolean solution(String[] phone_book) { HashMap map = new HashMap(); for(int i=0; i
해시 문제입니다. 옷의 종류별로 조합해서 입을 수 있는 경우의수를 구해야 합니다. 입력으로 옷들이 주어지면 종류별로 구분하고 개수를 세기 위해 해시맵을 사용합니다. 종류를 키로 사용하여 개수를 카운트한 후 이터레이터를 사용해서 종류별로 조합해서 입을 수 있는 경우의 수를 구합니다. 모자x, 모자1, 모자2 안경x, 안경1 3 * 2 - 1 (모자, 안경 둘다 x인 경우는 제외) import java.util.*; class Solution { public int solution(String[][] clothes) { // 모자x, 모자1, 모자2 // 안경x, 안경1 // 3 * 2 - 1 (모자, 안경 둘다 안쓴 경우) int answer = 1; HashMap map = new HashMap(); f..
해시셋 문제입니다. 중복 제거 시, N/2가 크냐 중복제거한 HashSet 종류 개수가 크냐 문제입니다. 최대 N/2개를 선택할 수 있는데, 중복이 많아서 종류개수 적으면 → 최대로 종류개수까지만 고를 수 있습니다. 즉, 최대개수, 중복제거한 HashSet 종류 개수 중 작은 것이 답입니다. import java.util.*; class Solution { public int solution(int[] nums) { int answer = 0; int max = nums.length/2; // System.out.println(max); HashSet numsSet = new HashSet(); for(int num : nums){ numsSet.add(num); } // 중복 제거 시, N/2가 크냐 ..
https://changun516.tistory.com/128 [문법] .size(), .capacity(),.length, .length()의 차이 | 자바에서 사용되는 .size(), capacity(), .length, .length()의 차이 Outline. 개발하다 보면, 해당 배열의 크기가 필요하는 경우가 종종 생긴다. 이때 검색 혹은 TOOL을 이용하여 확인을 할텐데 size(), capacity() changun516.tistory.com
해시 문제입니다. 완전탐색 또는 해시맵을 이용해서 문제를 풀 수 있습니다. 1. 완전 탐색 풀이 배열 길이가 10만까지라서 하나씩 완전탐색하려면 10만*10만 / 2 로 시간초과입니다. 그러나 정렬 후 참가자 배열과 완주자 배열을 한번만 쭉 이름으로 비교탐색한다면, 한번의 완전탐색으로 문제를 풀 수 있습니다. import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { // 1. 정렬하고 하나씩 이름 비교하면 // 완주자가 다른 사람인 경우 그 참가자는 완주자 배열에 없는 사람 // 마지막까지 안나오면 마지막 사람이 완주하지 못한 선수 String answer = ""; Arra..
문자열, 그리디 문제입니다. 0 덩어리, 1 덩어리의 개수를 구하고 최솟값을 반환합니다. 맨 첫번째 문자가 0이면 0 덩어리 개수 1 맨 첫번째 문자가 1이면 1 덩어리 개수 1 로 시작합니다. 나머지 인덱스에 대하여 앞의 값과 다를 경우, 0이면 0 덩어리 개수, 1이면 1 덩어리 개수를 추가합니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamR..
문자열 문제입니다. char - char = int 입니다. b - 'a' = 1 a - 'a' = 0 e - 'a' = 4 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int[] cntArr = new int[26]; for(char c : str.toCharAr..
문자열 문제입니다. StringBuilder 사용하면 더 효율적일거라 생각했는데 문자열 길이가 100이하여서 그런지 실행시간 차이는 크지 않았습니다 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); StringBuilder sb = new StringBuilder(); ..
문자열 + 스택 문제입니다. 1. string은 equals 로 데이터 값 비교 == : 주소값 비교 equals : 데이터값 비교 -> string 이 같은지 보려면 equals 사용해야함 2. if else 조건문은 and or 생각하면서 합치기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(..

10815와 원리는 비슷 다만 이진탐색 시 찾은 숫자의 중복 갯수를 알아야 함 -> 중복 숫자의 시작부분(lowerBound), 더 이상 나타나지 않는 위치(upperBound)의 위치를 알아서 그 사이의 길이를 구하면 됌 - 5라는 숫자를 찾는다면, 없어서 lowerBound, upperBound 위치가 같아서 차이 구하면 0나옴 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { static int N, M; static int[] nCard, mC..