[문제] https://www.acmicpc.net/problem/2468 [처음 생각] 보고 먼저 min 높이와 max 높이를 구해서 min부터 max까지 높이 따져서 매번의 안전 지역을 세서 max값을 갱신해주면 되겠다고 생각은 했는데, 이게 왠지 시간초과 날거같아서 답지 찾아봤는데... [풀이] 내가 생각한 방식이 정답이었다. 시간이 모자라서 지금 다른 방식이 당연히 맞을 것 같아서 답지 찾아본건데...원래는 visited 배열을 int형으로 선언해서 매번의 tmpAns를 구하려고 했는데 그렇게 하면 visited 배열에서 max값을 또 찾는 과정을 넣어야 하니까 그냥 boolean 배열로 선언하고, 따로 tmpAns 변수를 ++ 하는 방식으로 했다. [Code] https://github.com/..
[문제] https://www.acmicpc.net/problem/2206 [처음 생각] https://www.acmicpc.net/problem/2178 보자마자 이 문제인줄 알았다. 대신 이 문제에서 벽을 한번 부술 수 있다는 기회가 있다는 점이 차이점이었다. 벽을 한번 부술 수 있는 대신에 가장 최단으로 갈 수 있는 거리를 찾아야 한다. 내가 소스를 짜봤을 때는 탐색하는 다음 방향의 블럭이 0일 때와 1일 때로 나눠서 생각했다. 그리고 그 안에서 전의 블럭(바로 큐에서 꺼낸 블럭)이 벽을 뚫고 온 상태인지 아닌지를 체크하며 벽을 뚫는 횟수 변수인 wall을 사용할 예정이었다. [풀이] 결국 소스를 참고 했는데...내가 생각한 것처럼 다음 방향의 블럭이 0일 때와 1일 때로 나눠서 하는건 맞았다. 대..
[문제] https://www.acmicpc.net/problem/13460 [처음 생각] 처음에는 맵을 보고 BFS로 풀어야겠다고 생각했는데, 빨간 구슬과 파란 구슬 모두를 움직여야 하므로 Queue가 2개여야 하나?? 라는 생각이 들었다. 그래서 그럼 BFS로 풀지 않고 단순하게 시뮬레이션으로 구현하고 예외처리해주는식으로 문제를 풀려고 했다. 근데 그 안에서 벽/앞에 구슬이 막고 있을 때/구멍을 만났을 때로 나눠서 생각하려니 너무 복잡하고 알고리즘이 짜이지 않아서 애먹었다... [풀이] 결국 째로탈출2 문제가 아닌 원래 째로탈출 문제의 코드를 참고해서 풀었다. BFS로 풀었고 나는 처음에 빨간 구슬과 파란 구슬을 한꺼번에 움직이기 위해서 while(true)문을 하나에 다 몰아서 쓰려고 했다. 근데 ..
[문제] https://www.acmicpc.net/problem/7569 [처음 생각] 처음에는 단순히 2차원 토마토처럼 6방향으로 돌면서 체크하면 되겠다고 생각했다. 그래서 그렇게 풀었는데 틀렸다... [풀이] 지난번 2차원 토마토 문제와 같은 방식으로 푸려다가 틀리긴했지만 같은 방식으로 다시 풀면 맞을 것 같다...! 대신 이번엔 visited 배열로 익은 날짜를 세는게 아니라 따로 토마토 위치를 저장하는 Uni 클래스 자체에 날짜를 세는 변수 cnt를 넣어서 변화시켰다. 그리고 계속해서 객체의 cnt값을 결과값에 갱신하며 모두 익었을 때의 날 수를 출력하도록 했다. 큐를 확인하는 while문에서 익지 않은 토마토를 만나면 애초에 세어 놓은 익지 않은 토마토 개수에서 1개씩 빼주고 그 토마토를 익히..
[문제] https://www.acmicpc.net/problem/7576 [처음 생각] 이전 BFS 문제와 마찬가지로 토마토 상자를 기준으로 상.하.좌.우 방향의 토마토들을 확인하면서 익지 않았고 방문하지 않았다면 그 토마토를 익히고 큐에 넣어주는 과정을 반복하면서 visited 배열의 익히는 날짜를 하루씩 늘려간다. [풀이] 풀었을 때, BFS 알고리즘 자체는 맞았다. 다만 문제에서 원하는 애초에 모두 익은 경우, 결과적으로 모두 익을 수 없는 경우, 모두 익었을 때의 걸린 날의 수를 출력하는 경우에서 틀렸다. 처음에 visited 배열의 초기값을 0으로 했었는데, 0이 아닌 -1로 두고 시작한다. 0으로 하지 않는 이유는 초기값을 0으로 두어도 어짜피 나중에 결과 count에서 1을 빼주기 때문에 ..
[문제] https://www.acmicpc.net/problem/2178 [처음 생각] 그냥 상하좌우 따져가면서 1이면 이동하고 0이면 이동하지 않는 BFS를 돌리면 되지 않을까? [풀이] 단 BFS를 하되, visited 배열에 방문하는 칸마다 숫자를 증가시킬 때 그냥 count++가 아닌 이전 칸의 visted값 +1로 증가시킨다 [Code] https://github.com/dbwls94/gomulsang/blob/youjin/BOJ/src/boj_2178/FindMirror.java
[문제]https://www.acmicpc.net/problem/2146 [처음 생각]지도에 있는 섬들을 나눠 저장해서 방문체크하며 거리를 계산하는 int형 2차원 배열을 만들어서 그 중 가장 작은 값을 반환하는 형식?다리의 길이 -> 실제 좌표 거리 계산한 값에서 소수점을 뗀 값이라고 생각 [풀이]지도를 BFS를 사용해서 검사하면서 육지이면서 아직 방문하지 않았다면 Queue에 넣고 체크한다.이때 체크하는 값은 단순히 방문했다는 1로만 체크하는 것이 아니라, 연결된 같은 육지라면 같은 값을 가지도록 한다. 그래서 visited 배열을 나중에 출력해보면 1110000222 1111000022 1011000022 0011100002 0001000002 0000000002 0000000000 00003300..
[문제]https://www.acmicpc.net/problem/1939 [처음 생각]일단 문제의 의도부터 읭?했다.난 이 문제를 이해하기로 한 번의 경로를 이동했을 때 옮길 수 있는 중량의 최댓값을 구하는걸로 이해해서 그럼 중량제한 입력받을 때 그냥 최댓값을 구하면 되는거 아닌가?라고 생각했고 지금도 헷갈린다...이해함!!!한 공장에서 다른 공장으로 옮기는 경우가 있다고 했고, 항상 2개의 공장이 존재하므로 이 2개의 공장을 각각 시작점과 도착지로 생각하여서 가는 경로에 옮길 수 있는 최대 물량으로 생각하면 되는 듯!가는 경로를 탐색하면서 매순간의 경로의 중량제한 값 중에서 최댓값을 구해서 그 다음 경로 탐색할때 그 값과 비교해서 더 크면 그 값으로 갱신하고 아니면 그 값 그대로 유지하는 방식으로 구하..
[문제]https://www.acmicpc.net/problem/1012 [처음 생각]보자마자 https://www.acmicpc.net/problem/2667위 문제와 똑같다는 생각을 했다. 이 문제는 연결된 단지가 있고 이 단지의 수를 세는건데 상하좌우 인접해있는것을 연결연결해서 찾으면 똑같으므로 visited 방문 배열에 count를 증가시켜서 인접하면 같은 count를 주는 식으로 문제를 풀었었다. [풀이]이 문제도 상하좌우를 돌면서 인접한 배추를 찾고 인접한 배추에 같은 count를 주면서 마지막 count를 출력하는 형식으로 풀었다. -> 한번 비슷한 형식으로 bfs를 푸니까 쉽다... 다음부터는 어려운 bfs 로 풀어봐야겠다. 예를들어 예전에 푼 토마토 문제같은? [Code]https://g..
- Total
- Today
- Yesterday
- 자료구조
- 조합 알고리즘
- 이진 검색
- 알고리즘
- Java
- 10809
- ACM Craft
- BOJ
- 13460
- acmpicpc
- lottie
- 2048 game
- spring
- mybatis
- 12100
- acmicpc
- 1157
- parametric search
- 파라메트릭
- 7569
- 이진 탐색
- 단어 공부
- 약수
- combination
- 위상정렬
- 1085
- 째로탈출2
- 7576
- 알파벳 찾기
- 1037
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |