본문 바로가기

해시맵21

[프로그래머스] 67258번 - 보석 쇼핑 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/67258 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 개발자 출신으로 세계 최고의 갑부가 된 어피치는 스트레스를 받을 때면 이를 풀기 위해 오프라인 매장에 쇼핑을 하러 가곤 합니다.어피치는 쇼핑을 할 때면 매장 진열대의 특정 범위의 물건들을 모두 싹쓸이 구매하는 습관이 있습니다.어느 날 스트레스를 풀기 위해 보석 매장에 쇼핑을 하러 간 어피치는 이전처럼 진열대의 특정 범위의 보석을 모두 구매하되 특별히 아래 목적을 달성하고 싶었습니다. 진열된 모든 종류의 보석을 적어도 1개 이상 포함하는 가장 짧은 구간을 찾아서 구매 예를 들어 아래 진열대는 4종류의 보석(RUBY,.. 2025. 3. 10.
[백준] 20920번 - 영단어 암기는 괴로워 [Java] https://www.acmicpc.net/problem/20920 1.  아이디어 Comparable을 이용한 정렬로 우선순위를 정하는 방식으로 해결할 수 있다.2. 문제풀이 정렬에 단어의 빈도수가 필요하므로 Map으로 입력을 받아서 단어와 개수를 세줬다. 이후 각 Entry를 활용해 노드 클래스를 만들고 이를 우선순위에 맞게 정렬하는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Node implements Comparable { String word; int cnt; public Node(String word, int cnt) { .. 2025. 2. 20.
[백준] 9627번 - 문장 [Java] https://www.acmicpc.net/problem/9627 1.  아이디어 Map 자료구조와 StringBuilder로 숫자에 해당하는 글자를 구하는 방식으로 해결했다.2. 문제풀이 1부터 9와 10의 배수들의 글자를 미리 Map에 static 블록을 활용해서 저장했다. 이후 getStr 메서드에서 이미 저장된 숫자면 바로 반환하고 아니면 100 이상일 때 100의 자리까지 계산하고 십의 자리 수가 2보다 크면 십의 자리와 일의 자리 글자의 조합으로, 20보다 작으면 바로 Map에서 꺼내는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final Map map = new HashMa.. 2025. 2. 12.
[프로그래머스] 138476번 - 귤 고르기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/138476 문제 설명경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.경화가 한 상자에 담으려는 귤의.. 2025. 2. 10.
[소프티어] 6255번 - 플레이페어 암호 [Java] https://softeer.ai/practice/6255 1.  아이디어 문자열을 통한 구현 문제로 열심히 구현하면 간단하게 해결할 수 있다.2. 문제풀이 먼저 주어진 메시지로 문자를 두 글자씩 나누는 조건을 구현했는데 for문에서 인덱스를 i+=2로 두 칸씩 건너가는 방식으로 두 글자를 뽑아서 다르면 StringBuilder에 넣고 같으면 X가 아니면 X를 넣고 X면 Q를 넣도록 했다. 이때 X 또는 Q를 넣으면 두번째 글자가 X 또는 Q로 대체되는 것이므로 i--로 인덱스를 하나 줄이도록 했다. 또 이때 삽입한 문자의 수를 저장해서 이후 기존 메시지와 삽입한 문자 수의 합이 홀수면 뒤에 X를 추가로 넣는 조건을 구현했다. 주어진 키를 표로 변환하는 것은 변환 후 남은 칸은 다시 A부터 없는 알파벳을.. 2025. 2. 7.
[백준] 21276번 - 계보 복원가 호석 [Java] https://www.acmicpc.net/problem/21276 1.  아이디어 이름을 통해 처리하는 상황이 많아서 Set, Map 등 다양한 자료구조를 활용했고 시조부터 위상 정렬을 수행해서 해결했다.2. 문제풀이 자식, 자손, 진입차수를 Map 자료구조로 처리했다. 자식은 출력을 위해 TreeMap을 활용했고 value도 TreeSet으로 미리 정렬하도록 했다. 자식과 자손을 구부하는게 포인트인데 위상 정렬은 자손으로 수행하며 선행 노드의 제거로 후행 노드의 진입차수가 0이 된 순간이 부모와 자식 관계가 됨을 활용했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] arg.. 2025. 2. 3.
[백준] 15595번 - 정답 비율 계산하기 [Java] https://www.acmicpc.net/problem/15595 1.  아이디어 HashSet과 HashMap을 활용해서 해결할 수 있었다.2. 문제풀이 Set에는 문제를 맞은 사람의 id, Map에는 문제를 틀린 사람의 id를 key, 문제를 틀린 횟수를 value에 저장했다. 문제를 틀린 횟수는 문제를 맞은 후로는 세지 않아야 한다. 입력을 받아 저장한 후 Map을 순회하며 Set에 있는 id인 경우에만 횟수를 세주면 문제를 맞은 사람이 문제를 맞기 전까지 틀린 횟수의 총합을 간단하게 구할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws I.. 2025. 1. 22.
[백준] 1302번 - 베스트셀러 [Java] https://www.acmicpc.net/problem/1302 1.  아이디어 HashMap을 활용해 책의 이름과 책의 개수를 다루면 간단하게 해결할 수 있다.2. 문제풀이 key에 책의 이름, value에 책의 개수를 저장하는 HashMap을 만들었다. 이후 반복문으로 Entry를 꺼내서 value가 최대일 때 책의 이름을 얻는 방식으로 구현했고 value가 현재까지 찾은 최댓값과 동일하면 사전순으로 앞서는 것을 비교하기 위해 String의 compareTo 메서드를 활용했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { .. 2025. 1. 20.
[백준] 1354번 - 무한 수열 2 [Java] https://www.acmicpc.net/problem/1354 1.  아이디어 이전 무한 수열 문제에서 수의 범위와 점화식의 모양만 약간 달라진 문제로 동일하게 Top-Down 다이나믹 프로그래밍으로 해결할 수 있다.([코딩테스트 준비/백준] - [백준] 1351번 - 무한 수열 [Java])2. 문제풀이 HashMap으로 메모이제이션해서 동일하게 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final Map dp = new HashMap(); public static void main(String[] args) throws IOException { BufferedReader.. 2025. 1. 16.
[백준] 14394번 - 9-퍼즐 [Java] https://www.acmicpc.net/problem/14394 1.  아이디어 9-퍼즐은 하나의 빈칸을 활용해 모든 배치를 만들 수 있다.2. 문제풀이 각 조각의 배치는 퍼즐의 이동으로 전부 만들어 낼 수 있어서 게임을 풀 수 없는 경우는 색깔의 개수가 다를 때 뿐인 점을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] input1 = br... 2025. 1. 15.
[백준] 10816번 - 숫자 카드 2 [Java] https://www.acmicpc.net/problem/10816 1.  아이디어 Map 자료구조로 간단하게 해결할 수 있다.2. 문제풀이 주어진 정수를 몇 개 가지고 있는지 구해야 하는 문제로 key에 정수, value에 해당 정수의 개수를 저장하는 HashMap을 활용하면 간단하게 해결할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter .. 2025. 1. 13.
[백준] 25206번 - 너의 평점은 [Java] https://www.acmicpc.net/problem/25206 1.  아이디어 HashMap을 활용해서 등급에 따른 평점을 간단하게 구할 수 있다.2. 문제풀이 HashMap에 key에 등급, value에 과목평점을 저장한 후 반복문을 돌며 과목 총점과 과목 수를 구한 후 나누는 방식으로 구현했다.과목 등급이 P인 경우만 주의해서 구현하면 된다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.i.. 2025. 1. 8.