

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