본문 바로가기

알고리즘66

[C++] 카드 뭉치 카드 뭉치코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 두 번째 카드 뭉치에서 "want"와 "to"를 사용하고 첫 번째 카드뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.  문자열로 이루어진 배열 cards1, car.. 2024. 6. 26.
[C++] 명예의 전당 (1) 명예의 전당 (1)"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다.  이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진.. 2024. 6. 26.
[C++] 문자열 내 마음대로 정렬하기 (sort 커스텀) 문자열 내 마음대로 정렬하기문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.  입출력 예["sun", "bed", "car"]1["car", "bed", "sun"]["abce", "abcd", "cdx"]2["abcd", "abce", "cdx"]  처음에 map으로 주어진 배열의 문자열과 인덱스를 저장하고 정렬하는 코드를 작성하려 했는데, sort 함수를 커스텀하여 그냥 주어진 문자열의 해당 인덱스 값을 기준으로 정렬하는 코드를 작성하여 풀이했습니다. .. 2024. 6. 24.
[C++] 푸드 파이트 대회 (얕은복사) 푸드 파이트 대회수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.  이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회.. 2024. 6. 24.
[C++] 두 개 뽑아서 더하기 (set) 두 개 뽑아서 더하기정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.  입출력 예[2,1,3,4,1][2,3,4,5,6,7][5,0,2,7][2,5,7,9,12]  2중 반복문을 이용하고 vector의  find 연산을 이용하여 중복 값을 체크하고 마지막에 정렬하여 풀이하였습니다.   풀이#include #include #include using namespace std;vector solution(vector numbers) { vector answer; for(int i = 0; i     추가적으로 set STL을 활용하면 .. 2024. 6. 22.
[C++] 가장 가까운 같은 글자 가장 가까운 같은 글자문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다. 예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다. 따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.   입출력 예"banana"[-1, -1, -1, 2, 2, 2]"foobar"[-1, -1, 1, -1, -1, -1]  2중 반복문으로 해당 글자 인덱스부터 뒤에서 앞으로 해당 글자가 있는지 찾아갑니다.   풀이#include #include using namespace std;vector solution(string s) { vector.. 2024. 6. 22.
[C++] 문자열 겹쳐쓰기 (replace) 문자열 겹쳐쓰기문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.   입출력 예"He11oWor1d""lloWorl"2"HelloWorld""Program29b8UYP""merS123"7"ProgrammerS123"   풀이#include using namespace std;string solution(string my_string, string overwrite_string, int s) { string answer = ""; answer = my_string.repl.. 2024. 6. 15.
[C++] 크기가 작은 부분문자열 (long long) 크기가 작은 부분문자열 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 입출력 예 "3141592" "271" 2 "500220839878" "7" 8 "10203" "15" 3 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다. 반복문으로 p 문자열 크기에 맞는 t 문자열에서의 문자를 맨 앞에서부터 잘라서 비교합니다. 이때 주의할 점은 문자열을 숫자로 변환할 때 오버플로가 발생하지 않도록 unsigned long long과 stoull()를 사.. 2023. 10. 22.
[C++] 추억 점수 추억 점수 그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때, 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요. 입출력 예 ["may", "kein", "kain", "radi"] [5, 10, 1, 3] [["may", "kein", "kain", "radi"],["may", "kein", "brin", "deny"], ["kon", "kain", "may", "coni"]] [19, 15, 6] ["kali", "mari", "don"] [11, 1, 55] [["kali", "mari.. 2023. 9. 18.