본문 바로가기

알고리즘 공부/프로그래머스 [C++]27

BaekJoon : 로또 [C++] [Silver2] 문제 링크 https://www.acmicpc.net/problem/6603 문제 설명 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34]) 집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오. 입력 입력은 여러 개의.. 2022. 11. 15.
BaekJoon : 하노이 탑 이동 순서 [C++] [Silver1] 문제 링크 https://www.acmicpc.net/problem/11729 문제 설명 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5개인 경우의 예시이다. 입력 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다. 출력 첫째 줄에 옮긴 횟수 K를 출력한다. 두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다. 예제 입력 .. 2022. 11. 15.
프로그래머스 : 여행경로 [C++] [Lv3] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/43164 문제 설명 1. 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다. 2. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 문제 입출력 예) tickets return [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] ["ICN", "JFK", "HND", "IAD"] [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["AT.. 2022. 11. 11.
프로그래머스 : 더 맵게 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42626 문제 설명 1. 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 2. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 3. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 4. Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. 5. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때 6. .. 2022. 11. 9.
프로그래머스 : 땅따먹기 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12913 문제 설명 1. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 2. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 3. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다. 문제 입출력 예) land answer [[2, 1, 3, 2], [5, 6, 7, 8], [4, 3, 2, 1]] 16 문제 풀이 위와 같은 문제는 DP로 풀어야하는 문제이다. Dynamic Programming (동적 계획법) DP란? 문제를 여러 개의 문제.. 2022. 11. 8.
프로그래머스 : 프린터 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=cpp 문제 설명 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 문제 입출력 예) priorities location return [2, 1, 3, 2] 2 1 [1, 1, 9, 1, 1, 1] 0 5 문제 풀이 queue에 pair을 사용해서, 고유 index값으로 해당 원소가 몇번 째에 출력이 되는지 찾으려고 했다. 그 이후 우선순위 큐에 있는 최대 값과 비교해서 같은 값이라면, .. 2022. 11. 8.
프로그래머스 : Summer/Winter Coding 소수 만들기 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12977 문제 설명 1. 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 2. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때 3. nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 구하시오. 문제 입출력 예) nums result [1,2,3,4] 1 [1,2,7,6,4] 4 문제 풀이 (1/2) nums으로 주어진 인자 중 3개를 골라 소수인지 확인을 해야 하기 때문에 3중 for문을 돌려 모든 경우의 수를 골라내야 한다고 생각했다. 모든 경우의 수를 찾은 다음, 그 숫자가 소수가 맞는지 아닌지만 판단하면 .. 2022. 11. 7.
프로그래머스 : 모의고사 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42840 문제 설명 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1. 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때 2. 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요. 문제 입출력 예) a.. 2022. 11. 4.
프로그래머스 : 숫자 문자열과 영단어 [C++] 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/81301 문제 설명 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1. 1478 → "one4seveneight" 2. 234567 → "23four5six7" 3. 10203 → "1zerotwozero3" 문제 입출력 예) s result "one4seveneight" 1478 "23four5six7" 234567 "2three45sixseven" 234567 "123" 123 문제 풀이 1/2 너무 비효율 적인 방법으로 문제를 풀었다,, s의 글자수 길이 만큼 for문을 돌리고, str이라는 문자열을 주고 이와 해당되는 공간을 찾아 변경을 실시하였다. for문에 for문을 .. 2022. 11. 4.