Algorithm 215

백준 / 11726번 / 2×n 타일링

[문제] 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. [입력] 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) [출력] 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. [예제 입력] 2 [예제 출력] 2 [예제 입력] 9 [예제 출력] 55 어떻게 풀어야하나 고민을 해보다가, 잘 모르겠어서 n=5인 경우까지 직접 그림을 그리며 풀어봤다. 풀어보니, 패턴이 보였다! arr[n] = arr[n-2] + arr[n-1] 이란 패턴이 반복된다. 주의해야 할 점은 n까지 모두 값을 위의 패턴대로 구한 후 마지막에 arr[n]%10007을 출..

Algorithm/Baekjoon 2023.01.15

Programmers / Level 2 / 짝지어 제거하기

[문제 설명] 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. [제한사항] 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습..

Programmers / Level 2 / 다음 큰 숫자

[문제 설명] 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. [제한사항] n은 1,000,000 이하의 자연수 입니다. [입출력 예] n result 78 83 15 23 n을 2진수로 변환했을 때 1의 개수가 같은 n보다 큰 숫자를 구하는 문제이다. 전에 이용..

Programmers / Level 2 / 피보나치 수

[문제 설명] 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. [제한사항] n은 2 이상 100,000 이하인 자연수입니다. [입출력 예] n return 3 2 5 5 n번째 피보나치 수를 구한 후, 그 수를 1234567로 ..

Programmers / Level 2 / 이진 변환 반복하기

[문제 설명] 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. [제한사항] s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다. [..

Programmers / Level 2 / 최솟값 만들기

[문제 설명] 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면 A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5) A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = ..

Programmers / Level 1 / 3진법 뒤집기

[문제 설명] 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. [제한사항] n은 1 이상 100,000,000 이하인 자연수입니다. [입출력 예] n result 45 7 125 229 우선, 3진법으로 나타내기 위해 String형 변수에 num%3을 더해주었다. 원래 문제대로라면, 3진법으로 한 번 변환을 하고 앞뒤 반전을 시켜야하는데 아래 코드처럼 answer += (num%3) => 이런식으로 한다면 앞뒤 반전을 시킨 대로 나오기 때문에 굳이 한 번 더 반전을 시킬 이유가 없다. 그리고 해당 숫자를 또 10진법으로 변환해야 한다. 3진법 -> 10진법 이므로, 3^0 => 3^1 ..

Programmers / Level 1 / 크기가 작은 부분문자열

[문제 설명] 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다. [제한사항] 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다. [입출력 예] t p result "3141592" "271" 2 "500220839878..

백준 / 1158번 / 요세푸스 문제

[문제] 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. [입력] 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) [출력] 예제와 같이 요세푸스 순열을 출력한다. [예제 입력] 7 3 [예제 출력] 사람의 수가 주어..

Algorithm/Baekjoon 2023.01.09

백준 / 1065번 / 한수

[문제] 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. [입력] 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. [출력] 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. [예제 입력] 110 [예제 출력] 99 [예제 입력] 1 [예제 출력] 1 [예제 입력] 210 [예제 출력] 105 우선 이 문제는 "한수" 에 대해 이해를 해야한다. 123 에서 각 자리를 떼어봤을 때 "1" "2" "3" 이 되는데, 연속된 두 개의 수의 차이가 일정한 수열을 등차수열이라고 ..

Algorithm/Baekjoon 2023.01.09