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을 리턴해주는 함수

 

오늘의 회고

문제에 제시되는 조건을 해석하고 문제풀이에 적용시키는 점이 까다로웠습니다.
반응형