본문 바로가기
PS/BOJ

[자바] 백준 10865 - 친구 친구 (java)

by Nahwasa 2022. 11. 2.

 문제 : boj10865


 

필요 알고리즘 개념

  • 구현
    • 문제를 잘 이해했다면 단순 구현문제임을 파악할 수 있다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  A와 B가 친구면 B와 A도 친구라는 조건만 있을 뿐이다. 만약 "A와 B가 친구고, B와 C도 친구라면 A와 C도 친구다." 같은 조건이 붙었거나, "A B가 입력으로 주어진 경우에 B A가 다시 입력으로 주어지는 경우는 없다." 라는 조건이 없었다면 단순 구현문제는 아니었겠지만 이 문제는 단순히 A와 B가 주어지면 둘만 서로 친구이다!

 

  따라서 N개의 A, B를 입력으로 받을 경우 A도 친구가 한명 늘어나고, B도 친구가 한명 늘어나면 된다. 이후 1번 학생부터 순서대로 친구의 수를 출력해줘야 하므로 N개짜리 배열을 사용해 친구 수를 세주는 것이 효율적이다.

 

 


 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int[] cnt = new int[n+1];
        while (m-->0) {
            st = new StringTokenizer(br.readLine());
            cnt[Integer.parseInt(st.nextToken())]++;
            cnt[Integer.parseInt(st.nextToken())]++;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            sb.append(cnt[i]).append('\n');
        }
        System.out.print(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글