문제 6 |
타일을 'R', 'G', 'B' 색으로 칠하려 합니다. R 색으로는 3칸을 한 번에, G 색으로는 2칸을 한 번에 칠할 수 있으며, B 색으로는 1칸을 칠할 수 있습니다. 색은 R, G, B 순서로 한 번씩 번갈아 가면서 사용해야 하며, 타일의 길이를 넘겨서 칠할 수는 없습니다.
예를 들어, 타일 길이가 11이면 "RRRGGBRRRGG"의 색으로 칠할 수 있습니다.
타일 길이가 매개변수 tile_length로 주어질 때, 타일을 색칠한 순서를 문자열로 return하는 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.
순서에 맞게 타일을 칠할 수 없다면 -1을 return 해주세요.
---
##### 매개변수 설명
타일 길이 tile_length가 solution 함수의 매개변수로 주어집니다.
* tile_length는 1,000 이하의 자연수입니다.
---
##### return 값 설명
타일을 색칠한 순서를 문자열로 return 해주세요.
* 순서에 맞게 타일을 칠할 수 없다면 -1을 return 해주세요.
---
##### 예시
tile_length | answer |
11 | "RRRGGBRRRGG"16 |
16 | "-1" |
##### 예시 설명
예시 #1
다음과 같은 순서로 타일을 칠하면 됩니다.
* 'R' - 3장
* 'G' - 2장
* 'B' - 1장
* 'R' - 3장
* 'G' - 2장
따라서 "RRRGGBRRRGG"를 return 하면 됩니다.
예시 #2
타일 길이는 16입니다.
'R', 'G', 'B' 순서대로 타일을 색칠하면 다음과 같습니다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
R | R | R | G | G | B | R | R | R | G | G | B | R | R | R | - |
15번째 타일까지 칠하니 타일이 한 칸 남았습니다. G 색으로는 두 칸을 칠해야 하므로 타일을 더 칠할 수 없습니다. 따라서 "-1"을 return 합니다.
[ 소스 코드 ]
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string solution(int tile_length){
string answer = "";
string com = "RRRGGB";
if(tile_length%6 == 1 || tile_length%6 == 2 || @@@)
answer = "-1";
else
for(int i = 0; i < tile_length; i++)
answer += com[i%6];
return answer;
}
int main() {
int tile_length1 = 11;
string ret1 = solution(tile_length1);
cout << "solution ? " << ret1 << endl;
int tile_length2 = 16;
string ret2 = solution(tile_length2);
cout << "solution ? " << ret2 << endl;
return 0;
}
[ 정답 보기 ]
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string solution(int length){
string answer ="";
string com ="RRRGGB";
if(length%6==1 || length%6==2 || length%6 ==4) answer ="-1";
else{
for(int i = 0; i < length ; i++) answer+=com[i%6];
}
return answer;
}
문제 7 |
주스 1잔을 만들려면 사과 3개와 당근 1개가 필요합니다. 그런데 키우는 토끼에게 먹이를 주기 위해 사과와 당근 종류에 상관없이 k개를 빼놓으려고 합니다. 주스는 최대한 많이 만들수록 좋습니다.
사과 개수 num_apple과 당근 개수 num_carrot, 토끼에게 줄 먹이 개수 k가 주어질 때 주스를 최대 몇 잔 만들 수 있는지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
---
#####매개변수 설명
사과 개수 num_apple과 당근 개수 num_carrot, 토끼에게 줄 먹이 개수 k가 solution 함수의 매개변수로 주어집니다.
* 사과 개수 num_apple과 당근 개수 num_carrot는 0 이상 200 이하인 정수입니다.
* 토끼에게 줄 먹이 개수 k는 0 이상 `num_apple+num_carrot` 이하인 정수입니다.
---
#####return 값 설명
주스를 최대 몇 잔 만들 수 있는지 return 해주세요.
---
#####예시
num_apple | num_carrot | k | return |
5 | 1 | 2 | 1 |
10 | 5 | 4 | 2 |
#####예시 설명
예시 #1
사과 2개를 먹이로 주면 사과 3개, 당근 1개가 남습니다. 남은 재료로 주스를 1잔 만들 수 있습니다.
예시 #2
사과 2개와 당근 2개를 먹이로 주면 사과 8개, 당근 3개가 남습니다. 남은 재료로 주스를 2잔 만들 수 있습니다.
[ 소스 코드 ]
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int solution(int num_apple, int num_carrot, int k) {
int answer = 0;
if(num_apple < 3 * num_carrot)
answer = num_apple / 3;
else
answer = num_carrot;
num_apple -= 3 * answer;
num_carrot -= answer;
for(int i = 0; k - (num_apple + num_carrot + i) > 0; i++)
if(i % 4 == 0)
answer++;
return answer;
}
int main() {
int num_apple1 = 5;
int num_carrot1 = 1;
int k1 = 2;
int ret1 = solution(num_apple1, num_carrot1, k1);
cout << "solution ? " << ret1 << endl;
int num_apple2 = 10;
int num_carrot2 = 5;
int k2 = 4;
int ret2 = solution(num_apple2, num_carrot2, k2);
cout << "solution ? " << ret2 << endl;
}
[ 정답 보기 ]
#include <string>
#include <vector>
using namespace std;
int solution(int a, int b, int k) {
int answer = 0;
if(a < (3 * b)) answer = a / 3;
else answer = b;
int remain_a = a - (3 * answer);
int remain_b = b - answer;
int i = 0;
k = k - (remain_a + remain_b);
while(k > 0) {
if(!(i % 4)) answer--;
i++;
k--;
}
return answer;
}
문제 8 |
A씨가 하루에 TV를 두 대 이상 트는 시간을 알아내려합니다. A씨는 매일 세 프로그램을 시청합니다. 프로그램 방송 시간이 겹칠 때는 TV를 여러 대 켜서 모든 프로그램을 봅니다.
예를 들어 두 프로그램 방송 시간대가 겹치면 TV를 두 대 켜고, 세 프로그램 방송 시간이 겹치면 TV를 세 대 켭니다.
세 프로그램 방영 시작 시각과 끝 시각이 담긴 2차원 배열 programs가 매개변수로 주어질 때, 하루에 TV를 2대 이상 트는 총 시간을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
---
#####매개변수 설명
3개의 프로그램이 시작되는 시각과 끝나는 시각이 담긴 2차원 배열 programs가 solution 함수의 매개변수로 주어집니다.
* programs의 행 길이는 항상 3입니다.
* programs 배열의 각 원소는 각 프로그램의 방송 시간이 [시작 시각, 끝 시각] 형태로 들어있습니다.
* 프로그램의 시작 시각과 끝 시각은 0 이상 24 이하의 정수입니다.
* 프로그램의 시작 시각은 끝 시각보다 항상 빠릅니다.
---
#####return 값 설명
A 씨가 TV를 2대 이상 트는 총 시간을 return 해주세요.
---
#####예시
programs | return |
[[1, 6], [3, 5], [2, 8]] | 4 |
#####예시 설명
2대의 TV를 트는 시간이 2시부터 3시까지, 5시부터 6시까지 총 2시간이고
3대의 TV를 트는 시간이 3시부터 5시까지 총 2시간입니다.
따라서 TV를 2대 이상 트는 시간은 총 4시간입니다.
[ 소스 코드 ]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<vector<int>> programs) {
int answer = 0;
vector<int> used_tv(25);
for(int i = 0; i < programs.size(); i++)
for(int j = programs[i][0]; j < programs[i][1]; j++)
used_tv[j]++;
for(int i = 0; i < used_tv.size(); i++)
if(used_tv[i] >= 1)
answer++;
return answer;
}
int main() {
vector<vector<int>> programs = {{1, 6}, {3, 5}, {2, 8}};
int ret = solution(programs);
cout << "solution ? " << ret << endl;
}
[ 정답 보기 ]
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> tv) {
int answer = 0;
vector<int> used_tv(25);
for(int i = 0; i < tv[i].size(); i++) {
for(int j = tv[i][0]; j < tv[i][1]; j++) {
used_tv[j]++;
}
}
for(int i = 0; i < used_tv.size(); i++) {
if(used_tv[i] >= 2) {
answer++;
}
}
return answer;
}
문제 9 |
관공서 주차장에서는 차량 2부제를 실시합니다. 차량 2부제는 차량 번호 끝자리가 홀수인 차량은 홀수 일에만, 짝수인 차량은 짝수 일에만 주차장에 들어올 수 있도록 하는 제도입니다.
며칠인지를 나타내는 day와 그날 주차장에 들어오려고 하는 차들의 번호를 담고 있는 배열 numbers가 매개변수로 주어질 때, 주차장에 들어올 수 있는 차량의 수를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 코드가 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정해주세요.
단, 중복되는 번호판 번호는 주어지지 않습니다.
---
#####매개변수 설명
며칠인지를 나타내는 day와 그날 주차장에 들어오려고 하는 차들의 번호를 담고 있는 배열 numbers가 solution 함수의 매개변수로 주어집니다.
* day는 1 이상 31이하의 자연수입니다.
* numbers의 길이는 1 이상 9,000 이하입니다.
* numbers의 원소는 1,000 이상 9,999 이하의 자연수입니다.
* numbers에는 차량 번호가 중복되어 들어있지 않습니다.
---
#####return값 설명
주차장에 들어올 수 있는 차량의 수를 return 해주세요.
---
#####예시
day | numbers | return |
17 | [3285, 1724, 4438, 2988, 3131, 2998] | 2 |
#####예시 설명
17일은 홀수 일이므로 홀수 번호 차량인 1724, 3131 총 2대의 차량만 주차장에 들어올 수 있습니다.
[ 소스 코드 ]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int day, vector<int> numbers) {
int count = 0;
for(int i = 0; i < numbers.size(); i++)
if(numbers[i]%2 != day%2)
count++;
return count;
}
int main() {
int day = 17;
vector<int> numbers = {3285, 1724, 4438, 2988, 3131, 2998};
int ret = solution(day, numbers);
cout << "solution ?" << ret << endl;
}
[ 정답 보기 ]
#include <string>
#include <vector>
using namespace std;
int solution(int day, vector<int> numbers) {
int count = 0;
for(int i = 0; i < numbers.size(); ++i)
if(numbers[i]%2 == day%2)
count++;
return count;
}
문제 10 |
배열 원소인 자신을 2로 나눈 값이 배열에 있는 수의 개수를 구하려고 합니다. 예를 들어, 배열이 [4, 8, 3, 6, 7]인 경우, 6/2 = 3, 8/2 =4이므로 자신을 2로 나눈 값이 배열에 들어있는 수의 개수는 총 2개입니다.
숫자가 담긴 배열 arr가 주어졌을 때, 자신을 2로 나눈 값이 배열에 들어있는 수가 몇 개인지 return 하는 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 코드가 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정해주세요.
---
##### 매개변수 설명
숫자가 담긴 배열 arr가 solution 함수의 매개변수로 주어집니다.
* arr의 크기는 1 이상 1,000 이하입니다.
* arr의 원소는 1,000 이하의 자연수입니다.
---
##### return 값 설명
자신을 2로 나눈 값이 배열에 들어있는 수가 몇 개인지 return 해주세요.
##### 예시
arr | return |
[4, 8, 3, 6, 7] | 2 |
##### 예시 설명
4/2=2이고, 2는 배열에 없습니다.
8/2=4이고 4는 4 이고 4는 배열에 존재합니다.
3/2=1.5이고 1.5는 배열에 없습니다.
6/2=3이고 3은 배열에 존재합니다.
7/2=3.5이고 3.5는 배열에 없습니다.
따라서 자신을 2로 나눈 값이 배열에 들어있는 수가 총 2개이므로 2를 return 합니다.
[ 소스 코드 ]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<int> arr) {
int answer = 0;
for (int i = 0; i < arr.size(); i++)
for (int j = 0; j < arr.size(); j++)
if (arr[i]%2 == 0 && arr[i]/2 == arr[j]) {
answer++;
continue;
}
return answer;
}
int main() {
vector<int> arr = {4, 8, 3, 6, 7};
int ret = solution(arr);
cout << "solution ? " << ret << endl;
return 0;
}
[ 정답 보기]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<int> arr) {
int answer=0;
for (int i = 0; i < arr.size(); i++) {
for (int j = 0; j < arr.size(); j++) {
if (arr[i]%2==0 && arr[i]/2 == arr[j]) {
answer++;
break;
}
}
}
return answer;
}
[ 출처 ] www.ybmit.com cos pro 샘플문제
'COS Pro C++ 2급 모의고사' 카테고리의 다른 글
8. COS Pro C++ 2급 모의고사 4차(6-10번) (0) | 2024.03.01 |
---|---|
7. COS Pro C++ 2급 모의고사 4차(1~5번) (0) | 2024.03.01 |
5. COS Pro C++ 2급 모의고사 3차(1~5번) (2) | 2024.02.28 |
4. COS Pro C++ 2급 모의고사 2차(6~10번) (1) | 2024.02.26 |
3. COS Pro C++ 2급 모의고사 2차(1~5번) (1) | 2024.02.26 |