[BOJ] 백준 17267 상남자 (JAVA)
Algorithm/- Baekjoon2024. 5. 14. 13:51[BOJ] 백준 17267 상남자 (JAVA)

📑 문제  🌱 아이디어BFS 응용문제, 다른 문제들과 비슷하게 상, 하, 좌, 우를 이동할 수 있지만 좌, 우는 이동 횟수가 제한된다.그렇다면 총 이동할 수 있는 칸은 몇 칸인가? 를 물어보는 문제이다. 먼저 현재 좌표, 좌, 우 남은 이동 횟수를 담는 객체를 만들고 방문처리 및 0-1 BFS를 돌리면 된다고 생각했다.하지만 91%쯤 실패한다... 예상컨대 큰 틀에서 구현자체는 틀리지 않았지만, 히든케이스를 만족시키지 못할 만큼디테일하게 구현하지 못했던 것 같다 BFS 응용문제에선 대부분 방문처리에서 히든테스트케이스가 나온다. 기본적인 2차원 boolean 배열의 방문처리에는 한 가지 단점이 있다.- 먼저 도착한 노드가 최적값인지, 아닌지를 판단하지 못하고 무조건 먼저 도착한 노드만 통과시킨다. 하나..

[BOJ] 백준 31782 저체온증 (JAVA)
Algorithm/- Baekjoon2024. 4. 30. 18:34[BOJ] 백준 31782 저체온증 (JAVA)

📑 문제🌱 아이디어낮, 밤 관련 BFS를 각각 구현하고, "영구적인 저체온증 환자"가 생기는 조건을 찾아보자. 위 문제의 키포인트는 볼드체로 잘 강조되어 있다. 낮, 밤을 나눠서 생각해 보자 - 낮"체온 회복 과정은 낮 사이 충분히 많이 반복될 수 있다."이 뜻은 다른 사람이 체온이 회복이 된다면, 그 주변 사람도 연쇄적으로 체온 회복이 가능하다는 뜻이다즉, 낮 BFS를 통해 단 한 번으로 가능한 모든 사람을 회복시켜야 한다. - 밤K명만큼 밤에는 저체온증 환자가 발생한다 단 "최악의 경우"로 발생한다.이 문제에서 최악의 경우란 낮이 되어도 회복이 불가능한 저체온증 환자이다. 그렇다면 어떤 조건에서 정상체온 환자가영구적인 저체온증으로 변경되는지 캐치해야 한다. 가장 먼저, 낮에서 체온을 회복할 때 정..

[BOJ] 백준 27211 도넛 행성 (JAVA)
Algorithm/- Baekjoon2024. 4. 10. 17:56[BOJ] 백준 27211 도넛 행성 (JAVA)

📑 문제🌱 아이디어BFS탐색을 통해 맵밖으로 나가게 된 경우를 모듈러 연산으로 처리하자! 만약 도넛행성에 있다고 상상해 보자! 어떤 방향으로 쭉 직진하게 되었을 때 결국 제자리로 돌아올 것이다.즉 좌표  xy (0,0)에서 한 칸 더 위로 직진한다면 (0, N-1)이 되어야 한다. 이 조건은 동서남북 어디서나 동일하게 적용한다. 위 문제는 기존에 범위체크에서 배열밖 좌표로 이동하는 것을 막아주는 BFS가 아닌맵밖으로 나간다면 반대 방향으로 탐색하게 만들어야 한다. 모듈러 연산을 통해 위와 같은 효과를 얻을 수 있다. 예를 들어 N = 5 일 때 배열의 인덱스는 0, 1, 2, 3, 4 일 것이다 인덱스 5를 탐색하려고 할 때 5 %= N을 통해 다시 인덱스 0을 탐색하게 만들면 된다.🌱 코드 및 풀..

[BOJ] 백준 1525 퍼즐 (JAVA)
Algorithm/- Baekjoon2024. 3. 19. 20:58[BOJ] 백준 1525 퍼즐 (JAVA)

📑 문제 🌱 아이디어"고민해도 안 나온다면 답지보고 내 것으로 만들자" 이 문제는 내가 여태까지 풀어왔던 알고리즘 지식 + 기법(?)으로  어떻게는 해결해보려고 했으나 다 실패했다.우울해하면서 결국 검색을 통해 코드를 봤다.HashMap으로 BFS 방문처리를 하는 코드였지만 정말 특이한 부분이 있었다 1차원 배열의 인덱스(문자열)를 2차원 배열로 변경해서 경로 이동후 다시 1차원 배열(문자열)로 변환 후HashMap을 통해 문자열을 저장하는 방법이었다 예를 들어문자열 str = "123456789"3*3 2차원 배열로 나타낼 때 1차원 배열 -> 2차원 배열Y = 3 / 3X = 3 % 3 숫자 4는idx ( 1 , 0 )에 위치하게 된다만약 X 축으로 +1을 해주고 idx ( 1 , 1 )로 이동했..

[BOJ] 백준 17836 공주님을 구해라! (JAVA)
Algorithm/- Baekjoon2024. 2. 13. 19:53[BOJ] 백준 17836 공주님을 구해라! (JAVA)

📑 문제🌱 아이디어"검을 먹는 경우"와 "검을 먹지 않는 경우"를 구하고 제한시간에 맞는 경우를 출력하자. 기본적인 BFS 알고리즘을 사용하지만 검을 먹는 경우 or 검을 먹지 않는 경우를 분리해서 풀어야 한다.그러기 위해선 BFS 알고리즘을 실행해서 검을 먹을 수 있는지에 대한 여부를 확인하고 먹었다면먹은 위치에서 목표가 있는 위치까지 벽을 부술 수 있기 때문에(장애물이 없다) 맨해튼 거리 로 최단 거리를 구해 더해주면 된다. Way1, Way2 는 도착할 수 없는 경우도 있기 때문에 Max 값으로 설정 후 진행한다Way1 = 검을 먹지 않는 경우 -> 기본 BFS으로 목적지까지 소요시간Way2 = 검을 먹은 경우 -> 검을 먹기까지  소요시간 + 맨해튼거리(한 칸 당 한 시간) 검을 먹기만 한다면..

image