[백준] 5567: 결혼식 (JAVA)

2025. 5. 14. 01:44·코테/Algorithm
728x90
5567: 결혼식 (실버2)

 

ArrayList<Integer>[]

이런 문제를 풀때 나는 ArrayList<Integer>[] 처럼 ArrayList 내에 배열을 넣어서 푸는걸 좋아한다.

오랜만에 풀었더니 또 정의하는 법 까먹었다 .. 앞으론 진짜 안까먹어야지

ArrayList<Integer>[] list = new ArrayList<>();

list = new ArrayList[N];

for(int i=0; i<N; i++){
	list[i] = new ArrayList<>();
}

list[0].add(1);
list[0].get(0); //1

풀이

상근이의 친구의 친구 까지만 결혼식에 초대한다. 즉, depth가 2인 친구들까지만 초대한다는 뜻이다.

이 경우 bfs와 dfs 둘 다로 문제를 해결할 수 있다. 난 bfs로 문제를 풀었다.

 

위의 ArrayList<Integer>[] 를 사용하면, 

6
5
1 2
1 3
3 4
2 3
4 5

이런 형태의 입력이 주어졌을 때

1 - 2, 3
2 - 1, 3
3 - 1, 4
4 - 3, 5
5 - 4

이런 형태로 저장되게 된다.

즉, 누가 누구와 친구인지 더 명확해지고 NxN 배열에 넣었을 때보다 방문해야하는 범위가 줄어들기 때문에 더 효율적이다.

static void bfs(int idx, int cnt) {
	Queue<Node> q = new LinkedList<>();
	q.offer(new Node(idx, cnt));
	visited[idx] = true;
		
	while(!q.isEmpty()) {
		Node n = q.poll();
		
		if(n.count == 2) {
			break;
		}
			
		for(int i=0; i<friendship[n.now].size(); i++) {
			int newIdx = friendship[n.now].get(i);
			if(!visited[newIdx]) {
				q.offer(new Node(newIdx, n.count+1));
				visited[newIdx] = true;
			}
		}
	}
}

나는 bfs를 돌면서 상근이의 친구의 친구까지 visited배열에 방문처리를 해주고 break 문으로 빠져나오는 코드를 작성했다.

visited 배열에서 true로 방문한 숫자의 친구만 결혼식에 부르면 된다.

전체코드

import java.io.*;
import java.util.*;

public class 실버2_5567_결혼식 {
	static class Node{
		int now;
		int count;
		Node(int now, int count){
			this.now = now;
			this.count = count;
		}
	}
	static int n;
	static int m;
	static ArrayList<Integer>[] friendship;
	static boolean visited[];
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		m = Integer.parseInt(br.readLine());
		
		friendship = new ArrayList[n+1];
		visited = new boolean[n+1];
		for(int i=0; i<n+1; i++) {
			friendship[i] = new ArrayList<>();
		}
				
		int tmp = 0;
		for(int i=0; i<m; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int friend1 = Integer.parseInt(st.nextToken());
			int friend2 = Integer.parseInt(st.nextToken());
			
			friendship[friend1].add(friend2);
			friendship[friend2].add(friend1);
		}
		
		bfs(1, 0);
		
		int answer = 0;
		for(int i=2; i<n+1; i++) {
			if(visited[i]) {
				answer++;
			}
		}
		
		System.out.println(answer);
		
		
	}
	static void bfs(int idx, int cnt) {
		Queue<Node> q = new LinkedList<>();
		q.offer(new Node(idx, cnt));
		visited[idx] = true;
		
		while(!q.isEmpty()) {
			Node n = q.poll();
			
			if(n.count == 2) {
				break;
			}
			
			for(int i=0; i<friendship[n.now].size(); i++) {
				int newIdx = friendship[n.now].get(i);
				if(!visited[newIdx]) {
					q.offer(new Node(newIdx, n.count+1));
					visited[newIdx] = true;
				}
			}
		}
	}
}

728x90

'코테 > Algorithm' 카테고리의 다른 글

[프로그래머스] Lv.2 호텔 대실 (JAVA)  (1) 2025.05.12
[프로그래머스] [1차] 비밀지도 (Python/JAVA)  (1) 2025.04.15
[프로그래머스] 숫자 문자열과 영단어 (Python)  (0) 2025.04.14
[프로그래머스] 서울에서 김서방 찾기 (Python)  (0) 2025.04.14
[프로그래머스] 없는 숫자 더하기(Python)  (0) 2025.04.14
'코테/Algorithm' 카테고리의 다른 글
  • [프로그래머스] Lv.2 호텔 대실 (JAVA)
  • [프로그래머스] [1차] 비밀지도 (Python/JAVA)
  • [프로그래머스] 숫자 문자열과 영단어 (Python)
  • [프로그래머스] 서울에서 김서방 찾기 (Python)
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (435) N
      • App·Android (1)
      • BE (49)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (11)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (27)
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (12)
      • Infra (1) N
      • Activity (2)
        • Education (0)
        • Intern (0)
        • 리모트 인턴십 6기 (2)
        • 구름톤 유니브 4기 (0)
        • SW교육기부단 15기 (0)
        • SK AI Dream Camp (0)
      • CS (8)
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 회고 (0)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    수학
    티스토리챌린지
    브루트포스 알고리즘
    자료구조
    매개변수탐색
    이분탐색
    투포인터
    오블완
    누적합
    그래프이론
    문자열
    구현
    최단경로
    정렬
    백준
    다이나믹프로그래밍
    시뮬레이션
    그래프탐색
    그리디알고리즘
    너비우선탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[백준] 5567: 결혼식 (JAVA)
상단으로

티스토리툴바