
백준 2346번 : 풍선 터뜨리기
이번 문제는 직전에 풀었던 요세푸스 문제와 비슷하지만 더 심화된 문제이다. 사실 정해진 원형 큐에서 순서의 자리를 찾는 요세푸스 문제와는 많이 다르다. 공통점이라고 하면 마찬가지로 원형이라는 것, 특정 순서대로 요소를 찾는 것 정도이다. n이 주어질 때 1부터 n까지의 풍선이 원형으로 놓여있고, 각각 특정 순서를 적어놓은 종이가 들어있다. ...
이번 문제는 직전에 풀었던 요세푸스 문제와 비슷하지만 더 심화된 문제이다. 사실 정해진 원형 큐에서 순서의 자리를 찾는 요세푸스 문제와는 많이 다르다. 공통점이라고 하면 마찬가지로 원형이라는 것, 특정 순서대로 요소를 찾는 것 정도이다. n이 주어질 때 1부터 n까지의 풍선이 원형으로 놓여있고, 각각 특정 순서를 적어놓은 종이가 들어있다. ...
이번 문제는 요세푸스 순열을 알고리즘으로 표현하는 문제이다. 말 그대로 표현하는 단계이기 때문에 복잡한 알고리즘은 없다. 그런데 요세푸스 문제를 처음 접해봤기 때문에 추후에 다시 만난다면 어떻게 해야하는 지 기억하기 위해 기록한다. 우선 요세푸스 순열은 양의 정수 두 개 n과 k가 주어질 때, n 명의 사람이 원형으로 있고 해당 원에서 k ...
이번 문제는 간식 배부 문제인데, 제약 조건이 있다. 해당 조건을 파악하기 위해 문제에 걸려있는 그림을 그대로 가져왔다. 그림에서와 같이 무작위로 정수가 입력되며 이 정수가 순서이다. 또한, 순서에 맞지 않는 정수가 있다면 한 쪽 라인으로 빠지고 순서에 맞는 번호가 입력되면 도착지로 도달할 수 있다는 것이다. 설명이 꽤나 복잡...
이번 문제는 직전에 풀었던 (기록은 하지 않았다.) 괄호 문제와 비슷하다. 다만, 괄호의 종류가 늘어났고, 문제에서 “사이에 있는 문자열도 균형”이라는 말이 무슨 말인지 헷갈릴 수 있다. 사실은 그냥 괄호 문제.ver2 이다. 직전에 풀었던 괄호 문제의 소스코드는 다음과 같다. import java.io.BufferedReader; impor...
이번 문제는 n개의 창문이 있고 n명의 사람이 있을 때 n번 째 사람이 n의 배수인 창문을 열고 닫는 문제이다. 이렇게만 보았을 때는 열고 닫는 “행위”를 모두 기록하고 계산해야할 것 같지만 실제로는 그렇지 않다. 나도 이 부분이 헷갈려서 처음에는 아래와 같은 알고리즘을 사용했다. import java.io.BufferedReader; im...
이전 문제인 베르트랑 공준은 단순히 에라토스테네스의 체 알고리즘을 사용하여 소수를 빠르게 구한 다음, n과 2n 사이의 소수를 구하는 문제였기 때문에 특별히 추가된 점이 없어 기록하지 않는다. 이번 문제 골드바흐 파티션은 처음 보았기 때문에 소수를 어떻게 하라는건지 단번에 이해하지 못했지만, 이내 짝수의 소수를 두 개 합하면 그 수가 된다는 것을...
이전의 문제도 마찬가지로 소수를 핸들링하는 문제였는데, 해당 문제는 특정 자연수를 입력 받아 다음으로 나오는 소수 중 가장 작은 소수를 찾는 문제였고, 브루트포스 알고리즘을 활용했기 때문에 특별히 적지 않았다. 그런데, 이번 문제는 M과 N 자연수를 입력 받아서 M이상 N이하의 소수를 모두 출력하는 문제였기 때문에 단순 브루트포스 알고리즘으로 ...
넥토리얼 코딩 테스트가 방금 끝났다. 나는 서류를 통과해야 코딩 테스트를 볼 수 있을 줄 알았는데, 서류 제출자는 전부 코딩 테스트를 보게끔 되어있었다. 솔직히? 망했다. 기본적으로 hackerrank 라는 사이트를 처음 들어보았고 문제 자체가 영어로 출제되었기 때문에 해석하는 데에도 시간이 걸렸다. 끝내 문제를 이해하지 못한 경우도 있...
이번 문제는 기존 가로수에 추가로 가로수를 심어 모두 같은 간격을 이루게끔 만드는 알고리즘이다. 예를 들어, 가로수가 1, 3, 7, 13의 위치에 있다면 추가로 5, 9, 11에 심어 같은 간격을 이루며 심을 수 있다. 주의해야할 것은 기존 나무들 사이에만 가로수를 추가로 설치해야한다는 점이고 기존 가로수의 위치는 랜덤이다. 다시 말해, 꼭...
이번 문제는 초등수학에서 배웠던 말 그대로 분수의 합을 구하는 문제이다. 다만, 기본적으로 더 이상 약분되지 않는 기약분수여야한다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { ...