본문 바로가기

[백준 / JAVA] 1987. 알파벳 (G4) https://www.acmicpc.net/problem/1987 싸피 때 비슷한 문제를 풀었던 기억이 있다. 벽 부수고 이동하기 시리즈인데 핵심은 탐색을 할 때 탐색하는 주체에 상태를 저장하는 것이다. 이 문제에선 해당 알파벳을 지났는지 여부를 배열로 객체 안에 넣었다. 이제 골드 문제 4개를 날먹할 수 있을 것이다.  import java.io.*;import java.util.*;public class Main { static BufferedReader br; static BufferedWriter bw; static StringTokenizer st; static StringBuilder sb; public static void main(String[] args) thr..
[백준 / JAVA] 9935. 문자열 폭발 (G4) https://www.acmicpc.net/problem/9935 처음엔 디큐(남들은 데크라고 함) 두 개를 써서 풀려고 했다. 두 디큐를 왔다갔다 하면서 뒤에서 빼줬다. 어차피 문자열 100만자 해봤자 200만 바이트 즉 2메가인데 메모리는 생각 자체를 안했다.  그리고 메모리가 터졌다. 내 속도 터졌다. 일주일이 지났다. 기부니가 안조아서 종일 누워있다가 스트레스 하나라도 해소할 겸 문제를 열었다. 디큐는 가변 메모리구조나 하나를 쓰든 두개를 쓰든 똑같겠지만 디큐를 하나만 써봤다. 메모리 초과가 났다. ArrayList 디큐가 LinkedList보다 메모리를 적게 쓴대서(속도는 더 느린걸로 암) 바꿨다. 시간초과가 났다.(2차위기) 코드를 다 지우고 문제의 비밀을 파헤쳤다. 이 문제의 비밀은 입력을 ..
[백준 / JAVA] 19238. 스타트 택시 (G2) https://www.acmicpc.net/problem/19238 어렵지 않고 풀이도 바로 보이는 문제이다. 아마 승객 탑승 지점과 도착 지점을 저장하는 방식 정도만 사람마다 다를 것 같다.나는 탑승 지점 지도를 따로 만들었는데, 2차원 맵에 인덱스를 저장하고 싶을 때 문제에 벽 같은 조건이 들어가 있어 곤란하다면 맵을 분리하면 편하다.(어차피 벽이 쓰이는 곳은 bfs에서 뿐임)도착 지점은 리스트로 저장했는데, 도착 지점은 중복될 수 있다는 점이 이 문제의 유일한 함정 같았다. 이걸 고려 안 해서 틀리는 경우가 있을진 모르겠다.  import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Ma..
[백준 / JAVA] 17141. 연구소 2 (G4) https://www.acmicpc.net/problem/17141 연구소 3 코드에서 emptySpace 조건만 바꿔서 날먹했다.  import java.io.*;import java.util.*;public class Main { static BufferedReader br; static StringTokenizer st; static StringBuilder sb; public static void main(String[] args) throws Exception { br = new BufferedReader(new InputStreamReader(System.in)); sb = new StringBuilder(); st = new StringTokenizer(br.readLine()); N..
[백준 / JAVA] 17142. 연구소 3 (G3) https://www.acmicpc.net/problem/17142 요즘 큰 산 두개를 넘으니 자기개발을 통 안한다는 생각이 들었다. 그래서 목표 중 하나였던 백준 플레를 인생에서 가장 젊을 때 다시 도전해보려 한다. 무려 약 100일 만에 푸는 알고리즘이다. 그래서 코드를 전부 짜기보다 기존 코드를 참고하여 풀 수 있는 문제를 골랐다. 이 문제의 함정(?)은 비활성 바이러스도 바이러스로 칸을 채운 취급을 한다는 것이다. 사실 마지막 예제을 보면 쉽게 알 수 있지만 출제자가 그 예제를 맨 밑에 박아놓은 덕분에 나도 밑바닥을 보고 왔다.    import java.io.*;import java.util.*;public class Main { static BufferedReader br; static Str..
[백준 / JAVA] 20058. 마법사 상어와 파이어볼 (G3) https://www.acmicpc.net/problem/20058 이번 달 들어 알고리즘을 풀면서 가장 빡치는 문제다. 문제 설명을 보면 '모든 부분 격자를 시계 방향으로 90도 회전시킨다.' 라고 쓰여 있고 이렇게 예시 사진이 있다.   이 사진을 보면 대부분의 사람이 1번 2번 3번 과정이 순서대로 진행됐다고 생각하지 않겠는가? 그리고 3번 테케를 틀리고 멘붕이 올 것이다. 사실 이 문제의 이동은 이런 식으로 일어난다.  차라리 예시 이미지가 없다면 통째로 굴러가는 걸 생각이라도 할텐데(심지어 이 편이 구현도 더 쉬움) '부분 격자'를 회전시킨 게 아니라 '부분 격자의 부분 격자'를 회전 시킨 내 잘못인건가?    import java.util.*;import java.io.*;public clas..
[백준 / JAVA] 16235. 나무 재테크 (G3) https://www.acmicpc.net/problem/16235(언제 고쳐줘요...) 개인적으로 가독성이 안 좋은 문제라고 생각한다. 코드를 다 짜고 틀려서 확인해보니 모든 땅 최초 양분이 5라는 조건이 문제 맨 위에 있더라...제발 문제 컨셉 적는 공간과 조건 적는 공간은 분리해줬으면 한다.그와 별개로 문제 자체는 PriorityQueue로 2차원 배열을 만들어서 나무 나이만 집어넣어도 가볍게 풀 수 있다. 봄과 여름 함수를 따로 구현하면 봄에 죽은 나무 리스트를 여름한테 넘겨줘야 하는 문제가 발생는데, 봄을 두 과정으로 쪼개고 중간에 여름을 끼워넣어 한번에 구현했다. 원래 메소드는 구현한 최신순으로 배치하는데 이번엔 문제 컨셉에 맞게 계절 순으로 배치해봤다.  import java.util.*;i..
[백준 / JAVA] 23288. 주사위 굴리기2 (G3) https://www.acmicpc.net/problem/23288 주사위 굴리기를 잘 풀었다면 약간의 변형으로 해결 가능한 보너스 느낌의 문제다. BFS가 추가되었다고 랭크가 하나 오른 것 같은데 사실 BFS보다 주사위 로직 구현이 더 어렵다고 생각하기에 후자를 구현할 사람은 전자도 구현할 수 있지 않을까?   import java.util.*;import java.io.*;public class Main { static BufferedReader br; static StringTokenizer st; static StringBuilder sb; public static void main(String[] args) throws Exception { br = new BufferedReader(new I..