목록알고리즘 (42)
Live Today
https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 💡 조합 + 시뮬레이션 + 완전 탐색 + bfs ✔️ 문제 풀이 궁수 3명 배치 → 조합 조합으로 궁수 3명을 배치할 때마다 기존 board 배열을 copy해서 풀어야 함. 각 궁수 위치에서 거리가 D이하이면서 가장 가까운 적 제거 여러 명이면, 가장 왼쪽에 있는 적 제거 result가 최대가 되려면, 각 궁수마다 서로 다른 표적을 제거해야 함. ✅ 정답 코드 import java.io.BufferedRea..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b056HM/btsj50NXVdH/J2eJN0N908cKcSRivNnOD0/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c2RvAs/btsiJzEy3wc/Kzz5AE8u8YE2zp9p24e9sk/img.png)
https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 🌙 문제 조건을 세세히 읽고 풀자. "만일 전부 다 녹을 때까지 두 덩어리 이상으로 분리되지 않으면 프로그램은 0을 출력한다." → 이 조건을 인지 못해서 틀렸었다. ✔️ 풀이방법 매년 빙하가 녹는다. 여기서 빙하 녹는 것 처리할 때 바로바로 2차원배열에 바뀐 값을 반영하면 안됨. 그래서 모든 2차원 배열 빙하 녹는 것 처리한 다음 마지막에 한 번에 2차원배열 값 바꿔야 함. 빙하 덩어리 체..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CJKTN/btr1IsnzkCD/QLl0owMMxzkmgfoaCzClm1/img.png)
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://school.programmers.co.kr/learn/courses/30/lessons/42577?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡2가지 방법의 문제풀이 ! ✔️ Arrays.sort() 후 for문을 돌며 다음 문자열이 이전 문자열을 접두어로 포함하는지 체크하는 방법 ✔️ 이 문제의 유형인 Hash 자료구조를 사용해 푸는 방법 🔹 1번째 방법 Arrays.sort() 를 사용해 문자열 배열 정렬 startsWith() 를 사용해 해당 문자열이 이전 문자열을 접두어로 갖는지 확인 import jav..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2Tytw/btrYTNV9ohH/akpHuZVk2UzKUrmA1fBjp1/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3kyeg/btrYYqevefY/t9l4UaYidlvaeh0fMXwg8k/img.png)
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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cSme3L/btrX4iP2RM3/YuKfpkkRbRSCHkAYyI8TYK/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zFlvI/btrX6oIAaj8/n6uuczNdWtcgq63RbqecYK/img.png)
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 💡 스택 자료구조를 이용해 풀기 ! N은 1 이상 500,000 이하 시간 제한 : 1.5초 🔹 틀린 이유 : N의 범위와 시간 제한 조건을 제대로 확인하지 못해서 시간초과 문제풀이를 하게 됐다. 문제 풀이 방법이 바로 생각 났다고 섣불리 코드부터 짜지 말자..!! 문제에서 주어진 변수의 범위와 시간 제한을 확인 후 시간복잡도를 계산 후 문제 풀이를 시작하자. 내가 푼 로직은 반복문이 중첩되어 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZElHO/btrX2XS1Mmt/U4Pujp1KZZh5KDWOZpwkA1/img.png)
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..