백준

    [백준, 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] 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에다가 넣어주고 큐에는 넣지 않는다. 이외의 경..

    [백준, Java] 5557번 : 1학년

    [백준, Java] 5557번 : 1학년

    🔗 문제 링크 https://www.acmicpc.net/problem/5557 😮 문제 해결 방법 처음부터 숫자를 더하거나 빼면서 그 값이 0이상 20이하가 되어야 한다. 완전탐색으로 문제를 풀기에는 경우의 수가 무수히 많기 때문에 DP를 이용한다. dp 배열의 사이즈는 마지막 숫자를 제외한 숫자의 개수, 0 - 20까지 경우의 수를 저장하게 dp[N-1][21]로 지정한다. 마지막 숫자는 수식의 = 이되기 때문에 마지막 숫자는 배열에서 제외한다. 배열에는 매 인덱스 별 계산한 결과값의 경우의 수가 저장되어있다. 따라서, N-1 인덱스까지 숫자의 인덱스를 옮겨가면서 이전 인덱스까지 결과값 0에서 20까지의 경우의 수 중 1번 이상 결과가 나온 값을 더하거나 빼준다. 더하거나 빼준 값이 다시 0이상 20..