목록알고리즘/백준 문제풀이 (20)
Live Today

https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 💡 HashMap과 PriorityQueue, Sort를 사용해서 해결 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; im..

https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 🌙 문제 조건을 세세히 읽고 풀자. "만일 전부 다 녹을 때까지 두 덩어리 이상으로 분리되지 않으면 프로그램은 0을 출력한다." → 이 조건을 인지 못해서 틀렸었다. ✔️ 풀이방법 매년 빙하가 녹는다. 여기서 빙하 녹는 것 처리할 때 바로바로 2차원배열에 바뀐 값을 반영하면 안됨. 그래서 모든 2차원 배열 빙하 녹는 것 처리한 다음 마지막에 한 번에 2차원배열 값 바꿔야 함. 빙하 덩어리 체..

https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 💡문제 조건을 세세히 읽어보자 ! 계속 문제를 읽어보자 ! 디버깅을 통해 문제를 해결하자 ! 코드가 길어지니 함수 단위로 쪼개서 유닛 테스트를 해보자 ! 3시간 만에 해결한 문제 ㅠㅠ 디버깅을 하며 해결했ㄷ ㅏ !!!!!! 💛 내가 생각한 풀이 모든 상어들이 자신의 현재 위치에 냄새를 뿌린다. 매 초마다 상어가 이동한다. (상어를 바로 이동시키는 것이 ..

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 💡 문자열 정렬 알고리즘 문제 ! - Collections.sort()를 활용해 input값의 문자열을 사전 순으로 정렬함. - PrirorityQueue를 활용해 단어의 길이가 같다면 문자열로 정렬되도록 설정함. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; impo..

https://www.acmicpc.net/problem/2902 2902번: KMP는 왜 KMP일까? 입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다. 첫 번째 글자는 항상 대문자이다. 그리고, 하이픈 뒤에는 반드 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main_bj_2902_KMP는왜KMP일까 { public static void main(String[] args) throws IOException{ BufferedReader br ..

https://www.acmicpc.net/problem/1445 1445번: 일요일 아침의 데이트 첫째 줄에 숲의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 3보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 숲의 지도가 주어진다. 숲의 지도는 S, F, g, . 만으로 이루어져 있 www.acmicpc.net 💡 PriorityQueue 자료구조를 활용해 다익스트라로 해결 ! 현재 위치의 좌표와 쓰레기를 지나쳐 온 칸의 개수와 쓰레기 옆을 지나온 칸의 개수를 가지고 있는 클래스를 만들었다. compareTo()는 쓰레기를 지나쳐온 칸의 개수가 같다면 쓰레기 옆을 지나친 칸의 개수가 작은 것을 반환한다. static class Point implements Comparable..

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 💡 스택 자료구조를 이용해 풀기 ! N은 1 이상 500,000 이하 시간 제한 : 1.5초 🔹 틀린 이유 : N의 범위와 시간 제한 조건을 제대로 확인하지 못해서 시간초과 문제풀이를 하게 됐다. 문제 풀이 방법이 바로 생각 났다고 섣불리 코드부터 짜지 말자..!! 문제에서 주어진 변수의 범위와 시간 제한을 확인 후 시간복잡도를 계산 후 문제 풀이를 시작하자. 내가 푼 로직은 반복문이 중첩되어 ..

https://www.acmicpc.net/problem/12919 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net 💡 이 문제의 키포인트는 S를 T로 바꿀 수 있는가의 로직이 아니라 T를 S로 바꿀 수 있는지 확인해야 시간초과가 나지 않는다. 💡시간 초과 난 풀이는 S를 가지고 알파벳 “A” 와 “B”를 추가해가며 dfs로 풀었다. 📍Java 문자열 자르기 - substring() String str = "Hello"; str.substring(1); // ello s..

https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 💡 [투포인터] 알고리즘 선형 시간으로 알고리즘을 풀 수 있게 만들어 줌 연속적인 값들을 이용해 푸는 문제에 적합 정렬 후 풀이 ✅ 정답 풀이 package algo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringToke..

https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 💡 틀린 이유 : 자료구조 선정을 잘못함 ! Queue는 First - In - First - Out 으로 가장 먼저 들어온 데이터가 가장 먼저 나간다. Queue의 2차원 배열로 처음에 구현했었는데 이렇게 하면 현재 탐색하는 말 번호와 같은 칸에 있는 말들 중, 그 위에 있는 말들이 아닌 그 아래 있는 말들이 빠져나오기 때문에 통과하지 못했다. 따라서 ArrayList타입으로 2차원 배열을 ..