문제 링크승률을 높일 정도로 승리하려면 최소 몇 번 해야하는가?승률은 소숫점을 버린 값이라고 봐야한다(88.8888 -> 88)기존 게임 이력(X, Y)은 최대 1,000,000,000개 이다.입력 값이 10억인데, 시간 제한은 2초이다.\-> 일반적인 반복문 O(n)
문제 링크강을 건널 때 최대로 밟을 수 있는 징검다리의 개수는?첫 점프는 아무데로나 갈 수 있다.다음 점프는 이전 점프로 넘은 징검다리 개수보다 많이 뛰어야 한다.N번째 징검다리를 꼭 밟아야한다.N번째 이후에는 위 규칙을 적용하지 않는다.징검다리(N)는 1 ~ 10^1
문제 링크(https://school.programmers.co.kr/learn/courses/30/lessons/43238?language=javan명의 입국 심사 처리에 대한 최소 시간하나의 심사대에는 한 명의 사람만 들어갈 수 있으며, 심사가 끝난 후 다
문제 링크깊이 우선 탐색을 사용하여 노드 방문 순서를 출력하라단, 인접 노드에는 오름차순으로 방문한다.DFS는 아래 두 개 사항에 신경을 써서 풀어야하는 것 같다.처음에는 ArrayList<Integer>\[]를 사용했는데, 정렬하는 데에 연산이 많아 속도가 느렸
문제 링크너비 우선 탐색을 사용하여 노드 방문 순서를 출력하라단, 인접 노드에는 오름차순으로 방문한다.BFS도 DFS와 비슷하게 아래 두 개 사항에 신경을 써서 풀어야하는 것 같다.PriorityQueue<Integer>\[]를 사용하면 실행 속도 많이 줄어든다.
문제 링크전체 한도 내에서 모든 지방에게 최대치로 나누어 줄 수 있는 경우에 가장 많은 금액을 가져간 지방의 예산(상한액)을 구하라총 예산은 최대 10억, 최대 지방 개수는 1만, 최대 상한액은 10만이다.상한액을 1씩 높여서 검사를 하면 O(N \* 상한액)이 필요하
문제 링크제공되는 부모와 자식 관계 데이터에 따라 두 인물의 촌수를 계산하라.대충 BFS로 풀어야 한다는 것까지는 파악했으나, BFS 함수를 어떻게 작성해야 할지 고민이 되었다.아래 2개는 기본이고,1\. 큐를 사용하여 add, poll 처리로 노드를 방문할 것2\.
문제 링크목표 길이 M을 얻기 위해서 잘라야 하는 최대 높이는 얼마인가?지정한 높이보다 큰 나무에 대해서는 모두 절단이 되며, 이 절단된 나무 조각들의 길이 합이 M보다 커야한다.가능한 적은 수의 나무를 절단해야 한다.최대 목표 길이는 20억이다. 값을 다룰 때 int
문제 링크시작점에서 도착점까지 나이트가 이동할 수 있는 최소한의 수를 구하라이번 문제는 한 번의 입력으로 여러 개의 BFS 결과를 출력했어야 했다.이 부분이 조금 헷갈렸으나, main 안에서 for 문으로 N번 반복하도록 하였다.문제는 BFS 안에서 어떻게 반복을 하는
문제 링크사전에서 특정 문자가 몇 번째 단어인지 구하라기존에 해왔던 DFS와는 다른 풀이가 필요했다.일단은 visited와 같이 방문 유무를 점검하는 변수를 사용할 필요가 없었다.DFS가 재귀적으로 반복되면서 알파벳을 하나씩 붙여나가도록 해야했다.DFS("", "AAA
문제 링크X에서 출발하여 K 만큼의 거리로 이동할 수 있는 모든 도시를 출력하라.도시 간에는 단방향으로만 도로가 있다.이제는 BFS를 처음부터 끝까지 혼자서 구축하고, 문제의 요구사항을 맞출 수 있게 되었다.다만, 세부적으로 정렬된 결과 값을 출력하는 부분에서는 문제가
문제 링크곰이 팬클럽 회원을 만나지 않을 수 있는 루트가 있는지 구하여라.곰은 단방향 그래프 위에서 움직인다.있다면 yes, 없다면 Yes를 출력하라.BFS와 DFS 중에 고민했는데,같은 레벨의 노드들을 먼저 방문하면서 팬을 만나는지 확인을 하는 게 우선이라 생각이 들
문제 링크상자 안에 모든 토마토가 익는데 며칠이 필요한가?상자는 MxN 크기이며 H개가 수직으로 쌓여있다.토마토는 혼자 익을 수 없으며, 근처에 익은 토마토가 있으면 익는다.근처 : 위, 아래, 왼쪽, 오른쪽, 앞, 뒤단, 이미 모든 토마토가 익은 상태면 0, 전체 토
문제 링크최소한의 횟수로 마법을 부려서 목표로 하는 고양이 개수에 도달할 수 있어야 한다. 그 횟수를 구하여라.최초에는 0마리로 시작한다.생성 마법은 1증가, 복제 마법은 가지고 있는 고양이 개수 이하의 숫자만큼 복제한다.목표 개수는 최대 10의 12승까지 주어질 수
문제 링크거스름돈 n에 대한 최소한의 동전 개수를 구하여라.동전은 5원과 2원짜리만 사용 가능하다.최적의 선택 : 큰 단위의 동전(5원 동전)을 최대한 많이 사용하는 것큰 단위부터 선택한다.가장 큰 단위인 5원 동전을 우선적으로 사용하여 거스름돈을 최대한 줄인다.나머지
문제 링크카드(문자)를 하나씩 가져와서, 단어 중 사전 순으로 가장 빠른 단어를 만들어 출력하여라.카드는 왼쪽에서부터 꺼낼 수 있다.단어를 만들 때에는 만들어진 단어의 왼쪽이나 오른쪽에만 새로운 문자를 추가할 수 있다.(중간에 추가 불가)최적의 선택 : 각 단계에서 사
문제 링크스테이지 레벨 별로 얻을 수 있는 점수가 증가하는 방식이 되려면 몇 번의 차감이 있어야 하는가?차감은 1번에 1씩 한다.높은 레벨은 낮은 레벨보다 더 높은 점수를 제공해야 한다.최적의 선택 : 현재 레벨의 점수가 다음 레벨의 점수보다 1 이하가 되도록 한다.배
문제 링크daldidalgo를 N번 반복하고 마지막에 daldidan을 입력하여 완성하는 최소 시간을 구하여라.매초마다 알파벳을 추가하거나 기존 문자열의 연속 부분을 복사해 붙여넣을 수 있다.N의 최대 값은 10^9 (10억)이다.최적의 선택 : 가능한 한 가장 큰 구
문제 링크N개의 센서를 도로 위에 설치하고, K개의 집중국을 배치할 때, 각 집중국의 수신 가능 영역 길이의 최소합을 구하여라센서의 좌표 값은 음수일 수도 있다.집중국의 개수가 센서의 개수보다 많지는 않다.일부 센서들의 좌표가 동일할 수도 있다.일단 문제를 이해하는 데
문제 링크각 강의의 시작시간과 종료시간이 주어질 때, 최소한으로 필요한 강의실의 개수를 구하여라하나의 강의실에서 동시에 2개 이상의 강의를 진행할 수 없다.강의 종료 시간과 또 다른 강의의 시작 시간이 동일할 때에는 하나의 강의실을 이어서 사용할 수 있다.PQ는 2개를
문제 링크수포자 세 명이 각각 정해진 방식으로 문제를 찍었을 때, 주어진 정답 배열과 비교해 가장 많은 문제를 맞힌 사람을 구하여라가장 높은 점수를 받은 사람이 여러 명이면, 결과를 오름차순으로 정렬하여 반환한다.시험 문제는 최대 10,000개, 정답은 1~5로 구성된
문제 링크주어진 갈색 격자 수 brown과 노란색 격자 수 yellow를 기반으로 카펫의 가로와 세로 크기 구하여라Leo가 본 카펫은 중앙이 노란색, 테두리가 갈색인 격자 모양이다.가로 길이는 세로 길이보다 크거나 같아야 하며, 조건을 만족하는 크기를 반환해야 한다.가
문제 링크주어진 현재 피로도 k로 던전을 탐험 가능한 순서를 모두 탐색하여, 최대로 탐험 가능한 던전 수를 구하여라.각 던전에는 탐험을 시작하기 위한 최소 필요 피로도와 탐험 시 소모되는 피로도가 주어진다.던전의 순서를 바꿔가며 모든 경우의 수를 탐색(완전 탐색)하여
문제 링크주어지는 문자열로 된 숫자들의 조합으로 소수를 몇 개 만들 수 있는가?입력된 문자열 numbers로 가능한 모든 숫자 조합(순열)을 만들고, 조합된 숫자 중에서 소수인 숫자를 찾아낸다.순열 생성모든 숫자의 순열을 생성 한다.(재귀 호출)각 숫자를 한 번씩 선택
문제 링크트리 구조로 이어져 있는 전력망을 두 개로 나누었을 때, 두 망의 송전탑 개수의 차이가 가장 작은 값은 무엇인가?모든 전선을 하나씩 끊어보면서 개수 차이를 조사한다.전선을 하나씩 끊어본다.두 망의 송전탑 개수를 계산한다.송전탑 개수 차이를 기록한다.이 흐름으로
문제 링크주사위를 규칙에 따라 쌓아올릴 때, 옆면의 숫자 합이 최대가 되도록 배치했을 때 그 합을 구하여라.주사위의 각 면(A ~ F)은 아래와 같이 서로 마주본다.A - F / B - D / C - E첫 번째 주사위는 자유롭게 놓을 수 있다.아래 주사위의 윗면 숫자는
문제 링크돌 게임에서 이기는 사람을 구하여라.게임은 SK, CY가 하며, SK가 먼저 시작한다.돌 N개가 주어진다.참가자들은 번갈아가면서 1개 또는 3개 돌을 가져갈 수 있다.마지막 돌을 가져가는 사람이 게임을 이기게 된다.작은 문제의 결과를 저장하고 이를 조합하여 큰