✏️ 문제당신은 비밀 조직의 보안 시스템을 뚫고 중요한 정보를 해독해야 합니다. 시스템은 1부터 n까지의 서로 다른 정수 5개가 오름차순으로 정렬된 비밀 코드를 가지고 있으며, 당신은 이 비밀 코드를 맞혀야 합니다.당신은 비밀 코드를 알아내기 위해 암호 분석 도구를 사용하며, m번의 시도를 할 수 있습니다. 각 시도마다 서로 다른 5개의 정수를 입력하면, 시스템은 그 중 몇 개가 비밀 코드에 포함되어 있는지 알려줍니다.만약 비밀 코드가 [3, 5, 7, 9, 10]이고, 입력한 정수가 [1, 2, 3, 4, 5]라면 비밀 코드에 포함된 정수는 3, 5 두 개이므로 시스템은 2를 응답합니다.당신은 m번의 시도 후, 비밀 코드로 가능한 정수 조합의 개수를 알고 싶습니다.비밀 코드에 사용된 정수의 범위가 1~..
✏️ 문제 🔢 알고리즘 #시뮬레이션 #해시맵 🤯 풀이 방법points: 운송 포인트들의 좌표routes: 로봇이 어느 포인트를 거쳐야 하는지찾아야 하는 것: 위험 상황의 발생 횟수 1) 각각의 route에 대해서 경로 배열을 만든다. (이동 포인트 이용해서) - 순회할 때 인덱스를 전체 값보다 하나 작게 잡아서 현재 값 기준으로 다음 값까지 이동 경로를 체크하게 함2) 만들어진 경로 배열을 인덱스별로 확인해서 겹치면 위험 상황 +1, 반복문 종료 - 같은 좌표에 많은 값이 충돌해도 하나의 충돌로 체크해서 HashMap 사용해서 경로에 대한 등장 횟수를 세는 방식으로 했음경로 계산은? ex) 1,4에서 6,4로 이동하려면: r 하나씩 증가 기본적으로 행 먼저 이동, 그다음 열 이동 처음에는 전..
✏️ 문제 🔢 알고리즘 #이진탐색 🤯 풀이 방법제한 시간 내에 퍼즐을 모두 해결하기 위한 숙련도의 최솟값을 구한다. 최솟값을 구하려면 특정 값에서는 진행이 불가할 때 그 값보단 커야 하고, 가능한 값 중에서는 제일 작아야 한다 그러면 1) 하나씩 올렸다 내린다 2) 특정 기준으로 값을 왔다갔다 해본다 > binary? > binary 하는 경우 0부터 가장 큰 diff를 기준으로 시작한다. 제출 후 테스트케이스 14에서 틀리는 경우: 숙련도는 1부터 시작해야 한다..제출 전 테스트케이스 마지막 틀리는 경우: 이진탐색 start 👾 구현 코드 (자바)import java.util.*;class Solution { public int solution(int[] diffs, int[] ..
✏️ 문제 https://www.acmicpc.net/problem/1351문제무한 수열 A는 다음과 같다.A0 = 1Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1)N, P와 Q가 주어질 때, AN을 구하는 프로그램을 작성하시오.입력첫째 줄에 3개의 정수 N, P, Q가 주어진다.출력첫째 줄에 AN을 출력한다. 🔢 알고리즘 #DP 🤯 풀이 방법 처음 제출한 코드는 ⬇️수열이라고 1부터 하나씩 계산하며 올라가면 메모리 초과가 난다. import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new ..
✏️ 문제문제절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.배열에 정수 x (x ≠ 0)를 넣는다.배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.프로그램은 처음에 비어있는 배열에서 시작하게 된다.입력첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 정수는 -231보다 크고, 231보다 작다.출력입력에서 0이 주어진 회수만큼 ..
✏️ 문제문제인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게..