[스터디] Java 알고리즘 2문제 (25.02.25)

2025. 2. 25. 13:22·LG 유플러스 유레카 SW/스터디

1. 백준 2252 - 줄 세우기

  • 위상 정렬 활용
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int M = sc.nextInt();
		
		List<List<Integer>> graph = new ArrayList<>();
		for(int i = 0; i <= N; i++) {
			graph.add(new ArrayList<>());
		}
		
		int[] inDegree = new int[N+1];
		
		for(int i = 0; i < M; i++) {
			int a = sc.nextInt();
			int b = sc.nextInt();
			graph.get(a).add(b);
			inDegree[b]++;
		}
		
		Queue<Integer> q = new LinkedList<>();
		for(int i = 1; i <= N; i++) {
			if(inDegree[i] == 0) {
				q.offer(i);
			}
		}
		
		List<Integer> result = new ArrayList<>();
		
		while(!q.isEmpty()) {
			int current = q.poll();
			result.add(current);
			
			for(int n:graph.get(current)) {
				inDegree[n]--;
				if(inDegree[n] == 0) {
					q.offer(n);
				}
			}
		}
		
		for(int r: result) {
			System.out.print(r + " ");
		}
		
		sc.close();

	}

}

2. SWEA 1251 D4 - [S/W 문제해결 응용] 4일차 - 하나로

  • MST 문제 - Prim 알고리즘 활용
import java.util.PriorityQueue;
import java.util.Scanner;

public class Solution {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();

		int T = sc.nextInt();
		for (int t = 0; t < T; t++) {
			int N = sc.nextInt();
			int[][] arr = new int[N][2];

			for (int i = 0; i < 2; i++) {
				for (int j = 0; j < N; j++) {
					arr[j][i] = sc.nextInt();
				}
			}

			double E = sc.nextDouble(); // 환경 부담 세율
			
			double[][] arr2 = new double[N][N];
			
			for(int i = 0; i < N; i++) {
				for(int j = 0; j < N; j++) {
					double l = euclid(arr[i], arr[j]);
					arr2[i][j] = arr2[j][i] = E * l;
				}
			}
			
			System.out.println();
			
			boolean[] visited = new boolean[N];
			double result = 0;
			int pickCnt = 0;
			
			PriorityQueue<Edge> pq = new PriorityQueue<>();
			pq.offer(new Edge(0, 0, 0));
			
			while(!pq.isEmpty()) {
				Edge e = pq.poll();
				
				if(visited[e.t]) continue;
				visited[e.t] = true;
				result += e.w;
				
				if(++pickCnt == N) break;
				
				for(int i = 0; i< N; i++) {
					if(!visited[i] && arr2[e.t][i] != 0) {
						pq.offer(new Edge(e.t, i, arr2[e.t][i]));
					}
				}
				
			}
			sb.append("#").append(t+1).append(" ").append(Math.round(result)).append("\n");
		}
		System.out.println(sb);
		sc.close();

	}

	static double euclid(int[] p1, int[] p2) {
		return Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2);
	}

	static class Edge implements Comparable<Edge> {
		int f, t;
		double w;

		public Edge(int f, int t, double w) {
			super();
			this.f = f;
			this.t = t;
			this.w = w;
		}

		@Override
		public int compareTo(Edge o) {
			return Double.compare(w, o.w);
		}

	}

}
728x90
반응형

'LG 유플러스 유레카 SW > 스터디' 카테고리의 다른 글

[스터디] MST 2문제 출제 및 풀기 + 도전 문제 2문제 (25.02.24)  (0) 2025.02.24
[스터디] Java 알고리즘 2문제 (25.02.21)  (1) 2025.02.21
[스터디] Java 도전 문제 3문제 (25.02.20)  (0) 2025.02.20
[스터디] Java 프로그래머스 PCCE 기출 14문제 (25.02.19)  (1) 2025.02.19
[스터디] Java 프로그래머스 기초 24문제 & 머쓱이 획득 (25.02.18)  (1) 2025.02.18
'LG 유플러스 유레카 SW/스터디' 카테고리의 다른 글
  • [스터디] MST 2문제 출제 및 풀기 + 도전 문제 2문제 (25.02.24)
  • [스터디] Java 알고리즘 2문제 (25.02.21)
  • [스터디] Java 도전 문제 3문제 (25.02.20)
  • [스터디] Java 프로그래머스 PCCE 기출 14문제 (25.02.19)
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    완전 탐색
    큐
    제주지역혁신플랫폼지능형서비스사업단
    Queue
    Stack
    힙
    디지랩챌린지
    exhaustive search
    스택
    기술로바꾸는세상
    제주해커톤
    heap
    디지털혁신
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[스터디] Java 알고리즘 2문제 (25.02.25)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.