TIL(Today I Learned)
99클럽 코테 스터디 10일차 TIL + 백준 2358 (평행선, java)
zincah
2025. 4. 12. 15:25
반응형

오늘의 학습 키워드
- HashMap
문제 탐색하기
문제

문제 풀이 설계하기
x축 또는 y축에 평행한 직선이 몇 개 인지 구하는 문제입니다.
여기서 같은 좌표가 여러번 주어진다해도 다른 점으로 간주해도 된다는 조건이 있습니다. 이것은 예를 들면 (1,1) (1,1) 의 점이 주어진다면 x값이 동일하므로 y축에 평행한 직선 1개, y값이 동일하므로 x축에 평행한 직선1개 이렇게 2개의 직선이 카운팅 된다는 뜻입니다.
즉 x값이 동일한 데이터가 들어오면 직선 1개로 생각하며 카운트를 1개씩 올려주면 됩니다.
이는 HashMap을 사용해서 key 값이 동일할때 value를 +1씩 해주도록 로직을 작성하면 됩니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main {
private static Map<Integer, Integer> sameXMap = new HashMap<>();
private static Map<Integer, Integer> sameYMap = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++){
String[] arr = br.readLine().split(" ");
int x = Integer.parseInt(arr[0]);
int y = Integer.parseInt(arr[1]);
sameXMap.put(x, sameXMap.getOrDefault(x, 0) + 1);
sameYMap.put(y, sameYMap.getOrDefault(y, 0) + 1);
}
int result = 0;
for(int cnt : sameXMap.values()){
if(cnt > 1){
result++;
}
}
for(int cnt : sameYMap.values()){
if(cnt > 1){
result++;
}
}
System.out.println(result);
}
}
- sameXMap : 좌표의 x 값이 동일할 경우 value를 +1 해주기 위한 map
- sameYMap : 좌표의 y 값이 동일할 경우 value를 +1 해주기 위한 map
- getOrDefault : map에서 찾는 키 값이 있는 경우 그 키값의 value를 리턴하고 없으면 0을 리턴해주는 함수
오늘의 회고
문제에 제시되는 조건을 해석하고 문제풀이에 적용시키는 점이 까다로웠습니다.
반응형