문제 링크 : https://www.acmicpc.net/problem/10158
난이도 |
알고리즘 | |
실버3 | 수학, 애드 혹, 사칙연산 |
1. 요구 사항 이해
시간, 메모리 제한 : 0.15초 / 256MB
x가 w, y가 h인 이차원 격자에서 x, y +1씩 이동.
x가 0또는 w, y가 0또는 h일때 증감을 바꿔서 입력 횟수만큼의 이동 후 있는 위치를 계산
w와 h는 자연수이며 범위는 2 ≤ w,h ≤ 40,000
초기 위치 p와 q도 자연수이며 범위는 각각 0 < p < w과 0 < q < h
이동 횟수 t의 범위는 1 ≤ t ≤ 200,000,000
2. 설계/검증
입력
- 격자 설정
- 초기 위치 좌표
- 이동 횟수
이동 실행 반복문
- 증감 변환
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(1) |
3. 정상 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 격자의 크기 입력
int w = scanner.nextInt();
int h = scanner.nextInt();
// 초기 위치 입력
int p = scanner.nextInt();
int q = scanner.nextInt();
// 시간 입력
int t = scanner.nextInt();
// 개미의 이동 계산.
// p + t는 개미가 현재 위치에서 시간 t만큼 이동한 위치
// 가로 길이의 두배인 2*w로 나눈 나머지를 구합니다.
// 격자를 벗어난 이동을 처리하고 다시 처음부터 반복되는 이동을 구현합니다.
int x = (p + t) % (2 * w);
int y = (q + t) % (2 * h);
// 경계면 반사 처리
if (x > w) {
x = 2 * w - x;
}
if (y > h) {
y = 2 * h - y;
}
System.out.println(x + " " + y);
}
}
4. 처리 과정 추적 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("[초기 상태]");
// 격자의 크기 입력
int w = scanner.nextInt();
int h = scanner.nextInt();
// 초기 위치 입력
int p = scanner.nextInt();
int q = scanner.nextInt();
// 시간 입력
int t = scanner.nextInt();
System.out.println("가로 크기: " + w + ", 세로 크기: " + h);
System.out.println("초기 X 위치: " + p + ", 초기 Y 위치: " + q);
System.out.println("이동 시간: " + t);
// 개미의 이동 계산.
// p + t는 개미가 현재 위치에서 시간 t만큼 이동한 위치
// 가로 길이의 두배인 2*w로 나눈 나머지를 구합니다.
int x = (p + t) % (2 * w);
int y = (q + t) % (2 * h);
System.out.println("\n[계산된 이동 위치]");
System.out.println("이동 후 X 위치: " + x + ", 이동 후 Y 위치: " + y);
// 경계면 반사 처리
if (x > w) {
x = 2 * w - x;
}
if (y > h) {
y = 2 * h - y;
}
// 출력: 경계면 반사 처리 후 위치
System.out.println("\n[경계면 반사 처리 후 위치]");
System.out.println("반사 처리 후 X 위치: " + x + ", 반사 처리 후 Y 위치: " + y);
// 최종 결과 출력
System.out.println("\n[최종 결과]");
System.out.println(x + " " + y);
}
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준](2024) 줄세우기 (설명/코드/정답) (0) | 2024.02.20 |
---|---|
[백준](2024) 성 지키기 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 소금 폭탄 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 문서 검색 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 단어 공부 (설명/코드/정답) (0) | 2024.02.19 |