오늘의 학습 키워드
- 구현
- 조건 분기
- 최대값 탐색
- 체스판 이동
공부한 내용 정리
병든 나이트는 보통 나이트보다 움직임이 제한된 형태로, 4가지 방향으로만 이동할 수 있다.
목표는 체스판 위에서 가능한 많은 칸을 방문하는 것이고, 이동 횟수가 4번 이상이면 네 가지 이동을 모두 써야 한다는 제약이 추가된다.
따라서, 체스판 크기(N, M)에 따라 조건을 분기해서 접근해야 했고, 각각의 경우를 다음과 같이 나눠서 풀었다.
- N == 1: 위아래 이동 자체가 불가능 → 방문 칸 수는 무조건 1
- N == 2: 2, 3번 움직임만 가능 → (M + 1) / 2 만큼 오른쪽 이동 가능, 최대 4칸
- N >= 3 && M < 7: 네 방향 모두 쓰지 못함 → 최대 4칸까지만 이동 가능
- N >= 3 && M >= 7: 모든 움직임 사용 가능 → M - 2칸까지 이동 가능
소스코드
/*
병든 나이트
입력 : N M = 20억 이하 수
N : 세로 길이 M : 가로길이
로직 : 왼쪽 아래서 출발함 0,0 아니고 N,0
병든 나이트의 이동 횟수가 4번보다 적지 않다면,
이동 방법을 모두 한 번씩 사용해야 한다.
이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는
이동 방법에 대한 제약이 없다.
1. 2칸 위, 1칸 오른쪽 (-2, +1)
2. 1칸 위, 2칸 오른쪽 (-1, +2)
3. 1칸 아래, 2칸 오른쪽 (+1, +2)
4. 2칸 아래, 1칸 오른쪽 (+2, +1)
if
N = 1 정답 : 1 이동불가
N = 2 M = 1 > 1번
오른쪽으로 갈 수 있는 횟수는 (M-1)/2
이동횟수가 4번 넘으면 제약이 생김 최대 4칸 까지 가능
N = 3 M = 4 일때
4가지 다 못감
이동가능한 만큼만 최대 이동 최대 M만큼 가능
N = 3 M = 6 일때
최대 4번 이동 가능
N = 3 M = 7일때
4가지 방향 다 가능 5번 이동
출력 : 이동거리
*/
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// ---- 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
long N = Long.parseLong(input[0]);
long M = Long.parseLong(input[1]);
// ---- 로직
if (N == 1)
System.out.println("1");
else if(N == 2)
System.out.println(Math.min(4, (M + 1) / 2));
else if (N >= 3 && M < 7)
System.out.println(Math.min(4, M));
else
System.out.println(M - 2);
}
}
오늘의 회고
• 어떤 문제가 있었고, 나는 어떤 시도를 했는지
처음엔 단순히 움직일 수 있는 칸 수를 시뮬레이션으로 세보려 했는데,
문제 조건이 명확히 나뉘는 경우가 많아서 조건 분기로 푸는 게 훨씬 깔끔하다고 판단되었다.
• 어떻게 해결했는지
체스판 세로 길이 N과 가로 길이 M에 따라 분기하여 각각에 맞는 공식으로 계산했다.
N == 2일 때는 (M + 1) / 2 공식이 포인트였고, M >= 7일 때는 네 가지 움직임을 모두 사용 가능해서 M - 2가 답임을 알았다.
• 무엇을 새롭게 알았는지
단순 구현이 아니라 문제 조건을 수학적으로 분석해서 공식화하면 훨씬 효율적으로 문제를 풀 수 있다는 걸 배웠다.
• 내일 학습할 것은 무엇인지
내일은 BFS 문제를 집중적으로 풀어보면서, 탐색 로직을 완전히 익혀 보겠다.
'99클럽 > 6기' 카테고리의 다른 글
99클럽 코테 스터디 12일차 TIL - 포도주 시식(백준 2156번) (0) | 2025.04.15 |
---|---|
99클럽 코테 스터디 11일차 TIL - 과자 나눠주기 (0) | 2025.04.14 |
제목: 99클럽 코테 스터디 9일차 TIL - 저울(백준 2437번) (0) | 2025.04.10 |
99클럽 코테 스터디 8일차 TIL - 한국이 그리울 땐 서버에 접속하지 (백준 9996번) (0) | 2025.04.09 |
99클럽 코테 스터디 7일차 TIL - 쇠막대기 (백준 10799번) (0) | 2025.04.08 |