반응형

 

문제 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 샘플문제

 

 

반응형
Posted by 명문코딩컴퓨터
,