ALGORITHM 100

[프로그래머스] 2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임

https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제 : 게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요. 문제 풀이 : Stack을 활용해서 풀었습니다. moves 배열만큼 돌면서 해당하는 숫자 번호를 board 인덱스로 사용..

[백준] 1764번 듣보잡

https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. �� www.acmicpc.net 문제 : 듣도 보도 못한 명단을 구하기 문제 풀이: 듣지 못한 명단을 HashSet에 넣어줍니다. 보지 못한 명단이 HashSet에 포함되어 있을 경우 ArrayList에 넣어주고 count 변수를 세줍니다. list를 정렬하여 출력해줍니다. 몰랐던 점: 처음에 듣지 못한 명단을 ArrayList에 넣어줬는데 시간초과가 났습니다. ArrayList는 순서도 같이 관리해야하기 때문에 시간이 ..

[백준] 1157번 단어 공부

https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); int[] arr = new int[26]; s = s.toUpperCase();//대문자로 변환 for (int i = 0; i < s.length(); i++) { arr..

[백준] 10808번 알파벳 개수

https://www.acmicpc.net/problem/10808 10808번: 알파벳 개수 단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다. www.acmicpc.net import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); int[] arr = new int[26]; for (int i = 0; i < s.length(); i++) { arr[s.charAt(i)-97]++; } for (int i = 0; i < 26; i++) { System.out.p..

[백준] 2902번 KMP는 왜 KMP일까?

https://www.acmicpc.net/problem/2902 2902번: KMP는 왜 KMP일까? 문제 KMP 알고리즘이 KMP인 이유는 이를 만든 사람의 성이 Knuth, Morris, Prett이기 때문이다. 이렇게 알고리즘에는 발견한 사람의 성을 따서 이름을 붙이는 경우가 많다. 또 다른 예로, 유명한 비대칭 www.acmicpc.net import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); for (int i = 0; i < s.split("-").length; i++) { String ss..

[백준] 2589번 보물섬

https://www.acmicpc.net/problem/2589 2589번: 보물섬 첫째 줄에는 보물 지도의 세로의 크기와 가로의 크기가 빈칸을 사이에 두고 주어진다. 이어 L과 W로 표시된 보물 지도가 아래의 예와 같이 주어지며, 각 문자 사이에는 빈 칸이 없다. 보물 지도의 www.acmicpc.net 문제: 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 문제 풀이 : 최단 거리이기 때문에 BFS를 활용해서 풀었습니다. 사방 탐색을 하며 연결된 map을 갈 때마다 큐의 사이즈를 재어주어 count 를 늘려주었습니다. 이후 answer 변수를 주어 count 중 가장 큰 수를 출력해줍니다. 가장 긴 시간이 걸리는 것으로 답입니다. 몰랐던 점 : ..

[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 오픈채팅방

https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제풀이 : 채팅방 메시지는 순서대로 출력되게 하면서, 닉네임은 최종 변경된 닉네임으로 출력되게 합니다. HashMap을 이용하여 uid는 key로 닉네임은 value로 줍니다. record 배열을 띄어쓰기로 구분하여 잘라준 후 HashMap에 저장해 줍니다. 같은 uid(key)가 있을 경우 해쉬맵에는 최종 변경된 닉네임으로 저장됩니다. String은 equa..

[백준] 2309번 일곱난쟁이

https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 : 7명의 난쟁이 구하기 문제 풀이 : 브루트 포스 먼저 9명의 난쟁이의 합계를 구한 뒤, 두명씩 묶어서 합계에서 두명을 뺐을 때 100이 되면 그 두명의 값을 0으로 바꾸고, 정렬한 뒤 0이 아닌 7명의 난쟁이를 구해주었다. 몰랐던 점 : 7명을 선택하는 것보다 2명을 제외 시키는 것이 빨랐다. boolean 형을 잘 쓰자. import java.util.Arrays; import java.util..

[백준] 6603번 로또

https://www.acmicpc.net/problem/6603 6603번: 로또 문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ static int k; static int[] S,ans; public static void main(String[] args) throws IOException { Buffere..

[백준] 2583번 영역 구하기

https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 문제 : 분리된 영역에서 각 영역의 넓이가 얼마인지 구하기 문제 풀이 : dfs활용 꼭지점의 좌표(0,0)을 왼쪽 위로 하고 , 오른쪽 아래 꼭지점의 좌표를 (M,N)으로 입력받아서 풀었습니다. count 변수는 영역의 넓이를 구해주고, answer 변수는 영역의 개수를 구해줍니다. import java.util.ArrayList; import java.util.Collecti..