[백준] java 26069 붙임성 좋은 총총이

Sundae·2024년 1월 8일
0

백준

목록 보기
54/63
post-thumbnail
post-custom-banner

https://www.acmicpc.net/problem/26069


문제

입력

이미지 출처: 백준

풀이과정

사람들은 두 명씩 만나므로 세 경우 중 한 가지이다.

첫 번째는 둘 다 무지개 댄스를 추고 있는 경우.
두 번째는 둘 중에 한 명만 무지개 댄스를 추고 있는 경우.
세 번째는 둘 다 무지개 댄스를 추고 있지 않은 경우.

문제에서 요구하는 정답은 마지막에 무지개 댄스를 추고있는 사람이 총 몇 명인지이다.

간단한 방법으로 바로 정답을 도출할 수 있다. 위 경우의 수를 따르면 첫 번째 경우에는 모두 무지개 댄스를 추고 있으므로 댄스를 추고 있는 사람 수를 바꿀 필요가 없다.

세 번째 경우에는 둘 다 무지개 댄스를 추고 있지 않으므로 마찬가지로 댄스를 추고 있는 사람 수를 바꿀 필요가 없다.

마지막 두 번째 경우다. 두 번째 경우에선 둘 중 한 명만 무지개 댄스를 추고 있는 경우에는 다른 한 명 또한 무지개 댄스를 추게 되므로 댄스를 추고 있는 사람 수가 한 명 늘어나게 된다.

이를 토대로 코드를 작성했다.

public class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String[] names;
        Set<String> nameSet = new HashSet<>();
        // ChongChong은 한 번이상 기록되며, 무지개 댄스를 추고있는 상태이다.
        nameSet.add("ChongChong");
        
        int N = Integer.parseInt(br.readLine());
        int count = 1;

        while( N-- > 0 ){

            names = br.readLine().split(" ");
			// 둘 중 한명이 nameSet에 포함되어있다면 나머지 한명 또한 nameSet에 저장한다.
            if( nameSet.contains(names[0]) && !nameSet.contains(names[1]) ) {
                nameSet.add(names[1]);
                count++;
            }
            else if( !nameSet.contains(names[0]) && nameSet.contains(names[1]) ) {
                nameSet.add(names[0]);
                count++;
            }

        }
        System.out.println(count);
    }
}

이름을 토대로 O(1)만에 찾기 위해 HashSet을 사용하였다. nameSet에 포함되어 있다면 댄스를 추고 있는 상태라는 의미이다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.
post-custom-banner

0개의 댓글