본문 바로가기

알고리즘70

[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.
[C++] 뒤에 있는 큰 수 찾기 뒤에 있는 큰 수 찾기 정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다. 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다. 제한사항 4 ≤ numbers의 길이 ≤ 1,000,000 1 ≤ numbers[i] ≤ 1,000,000 입출력 예 [2, 3, 3, 5] [3, 5, 5, -1] [9, 1, 5, 3, 6, 2] [-1, 5, 6, 6, -1, -1] 제한사항을 확인해 보면, 최대 길이가 100만인데 O(n^2)의 시간.. 2023. 9. 15.
[C++] (우선순위 큐) 큰 숫자만 계속 고르기 큰 숫자만 계속 고르기 n개의 숫자가 주어졌을 때 그 중 가장 큰 숫자를 골라 1씩 빼는 작업을 m번 반복하려고 합니다. 이를 반복한 이후 남아있는 숫자들 중 최댓값을 구하는 프로그램을 작성해보세요. 단, 가장 큰 숫자가 여러 개라면 이 중 아무거나 하나를 골라 진행하면 됩니다. 입출력 예제 입력: 5 4 1 5 4 2 1 출력: 3 처음에 [1, 5, 4, 2, 1] 이 있습니다. 이 중 최대를 골라 1을 빼주면 결과는 [1, 4, 4, 2, 1]이 됩니다. (1회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 3, 4, 2, 1]이 됩니다. (2회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 3, 3, 2, 1]이 됩니다. (3회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 2, 3, 2, .. 2023. 7. 28.
[C++] 같은 숫자는 싫어 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 입출력 예 [1,1,3,3,0,1,1] [1,3,0,1] [4,4,4,3,3] [4,3] 주어진 arr.. 2023. 7. 18.
[C++] (queue) 프로세스 프로세스 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다. 1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다. 2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다. 현재.. 2023. 7. 18.
[C++] (map) 달리기 경주 달리기 경주 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요. 제한사항 5 .. 2023. 7. 15.