전체 글 167

[백준] 1107 리모컨

문제수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오.수빈이가 지금 보고 있는 채널은 100번이다.입력첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0..

[프로그래머스] 봉인된 주문

문제 설명어느 날, 전설 속에 전해 내려오는 비밀 주문서가 세상에 다시 모습을 드러냈습니다. 이 주문서에는 마법 세계에서 사용되는 모든 주문이 적혀 있는데, 각 주문은 알파벳 소문자 11글자 이하로 구성되어 있습니다. 주문서에는 실제로 마법적 효과를 지니지 않는 의미 없는 주문들 즉, 알파벳 소문자 11글자 이하로 쓸 수 있는 모든 문자열이 고대의 규칙에 따라 아래와 같이 정렬되어 있습니다.글자 수가 적은 주문부터 먼저 기록된다.글자 수가 같다면, 사전 순서대로 기록된다.예를 들어, 주문서의 시작 부분은 다음과 같이 구성됩니다."a"→"b"→"c"→"d"→"e"→"f"→...→"z"→"aa"→"ab"→...→"az"→"ba"→...→"by"→"bz"→"ca"→...→"zz"→"aaa"→"aab"→...→..

[프로그래머스] 주사위 고르기

문제 설명A와 B가 n개의 주사위를 가지고 승부를 합니다. 주사위의 6개 면에 각각 하나의 수가 쓰여 있으며, 주사위를 던졌을 때 각 면이 나올 확률은 동일합니다. 각 주사위는 1 ~ n의 번호를 가지고 있으며, 주사위에 쓰인 수의 구성은 모두 다릅니다.A가 먼저 n / 2개의 주사위를 가져가면 B가 남은 n / 2개의 주사위를 가져갑니다. 각각 가져간 주사위를 모두 굴린 뒤, 나온 수들을 모두 합해 점수를 계산합니다. 점수가 더 큰 쪽이 승리하며, 점수가 같다면 무승부입니다.A는 자신이 승리할 확률이 가장 높아지도록 주사위를 가져가려 합니다.다음은 n = 4인 예시입니다.주사위구성#1[1, 2, 3, 4, 5, 6]#2[3, 3, 3, 3, 4, 4]#3[1, 3, 3, 4, 4, 4]#4[1, 1, ..

템플릿은 구현 코드를 별도의 파일로 구분할 수 없는 이유

컴파일러는 컴파일 시 cpp 파일들을 개별적으로 해석한다.그리고 어떤 템플릿을 사용한 cpp파일을 컴파일 할 때, 해당 템플릿을 인스턴스화 해야한다. 이 때 템플릿의 구현부를 cpp로 분리했다면, 템플릿의 헤더 파일에는 구현부가 들어있지 않아서 구현부의 인스턴스화가 누락된다.아래와 같은 상황을 생각해보자.#include "MyTemplate.h" // 이 헤더에는 구현부가 포함돼있지 않음.int main() { MyTemplate obj; //이 시점에서 MyTemplate.h를 보고 MyTemplate의 인스턴스화가 진행됨. obj.doSomething(); // 여기서 문제 발생}// MyTemplate.htemplateclass MyTemplate {public: void doSo..

C++ 2025.05.19

[HackerRank] Climbing the Leader Board

문제 https://www.hackerrank.com/challenges/climbing-the-leaderboard/problem?isFullScreen=true#! Climbing the Leaderboard | HackerRankHelp Alice track her progress toward the top of the leaderboard!www.hackerrank.com 풀이 처음엔 문제를 잘못 이해해서 꽤나 힘들었습니다. 먼저 ranked 배열의 점수들을 중복제거한 배열을 만듭니다. 이 배열을 ranks라고 이름지었습니다.이후 player 배열의 요소들을 순회하며 ranks의 배열과 비교하여 순위를 찾아서 results 배열에 push하는 게 끝입니다.player 배열의 요소와 ranks 배열..

[백준] 1788 피보나치 수의 확장

문제 F(n):={0if n=0;1if n=1;F(n−1)+F(n−2)if n>1.$$F(n) := \begin{cases}0 & \text{if }n = 0\text{;} \\ 1 & \text{if }n = 1\text{;} \\ F(n-1) + F(n-2) & \text{if }n > 1\text{.} \end{cases}$$ 수학에서, 피보나치 수는 위의 점화식과 같이 귀납적으로 정의되는 수열이다. 위의 식에서도 알 수 있듯이, 피보나치 수 F(n)은 0 이상의 n에 대해서만 정의된다.하지만 피보나치 수 F(n)을 n이 음수인 경우로도 확장시킬 수 있다. 위의 식에서 n > 1인 경우에만 성립하는 F(n) = F(n-1) + F(n-2)를 n ≤ 1일 때도 성립되도록 정의하는 것이다. 예를 들어 ..

[백준] 1003 피보나치 함수

문제다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); }}fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.두 번째 호출한 fibon..

[백준] 1459 걷기

문제세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (X, Y)에 위치한 집으로 가려고 한다. 세준이가 걸을 수 있는 방법은 두가지 인데, 하나는 도로를 따라서 가로나 세로로 한 블록 움직여서 이번 사거리에서 저 사거리로 움직이는 방법이고, 블록을 대각선으로 가로지르는 방법이 있다.세준이가 집으로 가는데 걸리는 최소시간을 구하는 프로그램을 작성하시오.입력첫째 줄에 집의 위치 X Y와 걸어서 한 블록 가는데 걸리는 시간 W와 대각선으로 한 블록을 가로지르는 시간 S가 주어진다. X와 Y는 1,000,000,000보다 작거나 같은 음이 아닌 정수이고, W와 S..

[백준] 1541 잃어버린 괄호

문제세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.입력첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.출력첫째 줄에 정답을 출력한다.풀이음수 뒤에 오는 모든 양수들을 괄호로 묶으면 큰 음수를 만들 수 있다. 큰 음수를 더하면 최종 결과가 작아지므로..

[백준] 1645 랜선 자르기

문제집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다.이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.)편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수길이만큼 자른다고 가..