[랜덤 마라톤] 레이저 쏘기(27499)

lhs's avatar
Dec 31, 2024
[랜덤 마라톤] 레이저 쏘기(27499)
notion image
notion image

1. 문제 풀이 아이디어

  • 반사되는 좌표를 계산하여 해당 기울기를 맵에 저장하는 방식으로 문제를 해결할 수 있다.

2. 나의 정답 코드

public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int n = Integer.parseInt(stringTokenizer.nextToken()); int m = Integer.parseInt(stringTokenizer.nextToken()); int k = Integer.parseInt(stringTokenizer.nextToken()); Map<Double, Integer> map = new HashMap<>(); int result = 0; for (int i = 0; i < n; i++) { stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int x = Integer.parseInt(stringTokenizer.nextToken()); int y = Integer.parseInt(stringTokenizer.nextToken()); for (int j = 0; j < k; j++) { double kx = j % 2 == 0 ? m * j + x : (j + 1) * m - x; int count = map.getOrDefault(y / kx, 0) + 1; map.put(y / kx, count); result = Math.max(result, count); } } System.out.println(result); bufferedReader.close(); } }

3. 정리

  • 입력을 처리하며, 최대 k번 반복하여 벽에서 반사된 좌표를 계산해 kx에 저장한다.
  • 해당 좌표의 기울기를 맵에서 찾아 값에 1을 더한 후, 결과값과 비교해 갱신한다.
  • 모든 입력을 처리한 뒤 최종 결과값을 출력하여 문제를 해결한다.
Share article

LHS's Study Space