Java

    [백준, Java] 2623번 : 음악프로그램

    [백준, Java] 2623번 : 음악프로그램

    🔗 문제 링크 https://www.acmicpc.net/problem/2623 😮 문제 해결 방법 위상 정렬을 이용해 서로의 순서를 구해준다. 입력에 대해 그래프를 생성한다. 입력에 대해 순서에 따라 indegree 배열의 개수를 카운팅해준다. 위상 정렬을 이용해 순서를 리스트에 담아준다. 리스트 사이즈가 N보다 작은 경우 순서를 보장할 수 없는 경우 → 0을 반환 그 외 순서 리스트를 반환해 출력한다. 🚩 Java 코드 package com.second.algorithm.baekjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public ..

    [프로그래머스, Java] 합승 택시 요금

    [프로그래머스, Java] 합승 택시 요금

    🔗 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72413 😮 문제 해결 방법 최단 거리 알고리즘을 적용하는 것이 문제의 키포인트이다. 모든 도시로부터 출발해 모든 도시로 도착하는 최단 거리를 구해준다. 최단 거리를 구하는 방식은 크게 두가지가 있다. (무방향 양수 그래프 기준) 하나의 정점 기준 최단 거리구하기 → 다익스트라 알고리즘 : 모든 도시에 대해 구해야하므로 for문을 통해 모든 최단 거리를 구한다. 모든 정점 기준 최단 거리 구하기 → 플로이드 워셜 알고리즘 모든 정점에 대한 최단거리를 구하는 알고리즘은 플로이드 워셜을 일반적으로 사용하기 때문에 플로이드 워셜 알고리즘을 통해 문제를 해결한다. (다익스트라 이용시 시간초과 ..

    [백준, Java] 14226번 : 이모티콘

    [백준, Java] 14226번 : 이모티콘

    🔗 문제 링크 https://www.acmicpc.net/problem/14226 😮 문제 해결 방법 BFS를 이용한 완전 탐색 방식으로 문제를 해결했다. 최초의 경우에는 화면에만 이모티콘이 있으므로 큐에 넣고 시작한다. 현재 시간에만 할 수 있는 행동을 구분하기 위해서 큐의 사이즈만큼만 현재 초에는 반복을 돌게 한다. 각각의 행동은 아래와 같은 조건에 따라서 할지 말지 구분할 수 있다. 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. 보내려는 이모티콘 개수보다 화면에 있는 이모티콘의 개수가 더 적은 경우에 이모티콘을 복사하는 것이 의미있다. 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. 보내려는 이모티콘 개수보다 화면에 있는 이모티콘의 개수가 더 적은 경우에 이모티콘을 클립보드로 가..

    [백준, Java] 21610번 : 마법사 상어와 비바라기

    [백준, Java] 21610번 : 마법사 상어와 비바라기

    🔗 문제 링크 https://www.acmicpc.net/problem/21610 😮 문제 해결 방법 주어진 기능 순서대로 구현하면 되는 시뮬레이션 문제이다. 구름이 di 방향으로 si칸 이동한다. 이 부분에서는 배열의 범위가 넘어가는 경우 처음 아니면 마지막으로 온다. 다음 행과 열을 구한다. (현재 행 , 열 + DX[방향] * 거리) 다음 행과 열이 0보다 작거나 N보다 크거나 같은 경우 넘어간 범위를 구해야한다. 0 보다 작은 경우 : (다음 행 or 열 + 1) % N + N - 1; N보다 크거나 같은 경우 : 다음 행 or 열 % N 넘어간 인덱스까지 구해진 경우 이동 후 구름 배열에 표시하고 해당 바구니의 물을 1 증가시킨다. 방금 물을 뿌린 부분에 물복사 버그를 진행한다. 이동 후 구름 ..

    [백준, Java] 1039번 : 교환

    [백준, Java] 1039번 : 교환

    🔗 문제 링크 https://www.acmicpc.net/problem/1039 😮 문제 해결 방법 주어진 숫자 M에 대해서 자릿수 교환이 K번 일어났을 때 나올 수 있는 최대값을 구하는 문제이다. 자릿수 i보다 자릿수 j가 더 커야하는 제한 조건이 있기 때문에 교환할 수 있는 자릿수의 순서쌍을 모두 구한다. 모두 구한 순서쌍과 함께 초기에 주어진 M 값과 K = 0인 상태로 큐에 넣어준다. 매 턴 마다 존재할 수 있는 값을 순서쌍을 이용해 구한다. 큐의 사이즈만큼 반복한다. 순서쌍을 이용해 자릿수 교환이 이뤄졌을 때 값을 체크한다. 이미 현재 턴에 교환한 숫자가 나왔거나 0으로 시작하는 경우의 값은 큐에 넣지 않는다. 만약 턴을 모두 사용한 경우에는 Set에다가 넣어주고 큐에는 넣지 않는다. 이외의 경..