반응형

 

문제 1

n일 동안 매일매일의 평균 기온이 순서대로 들어있는 배열이 있습니다. 이때, A 번째 일과 B 번째 일 사이에서 A, B 번째 일보다 기온이 높았던 날은 총 며칠이었는지 구하려 합니다.

n일 동안 매일매일의 평균 기온이 순서대로 들은 배열 temperature, 두 날짜를 나타내는 자연수 A, B가 매개변수로 주어질 때, A 번째 일과 B 번째 일 사이에서 두 날짜보다 기온이 높았던 날은 총 며칠인지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

---
#####매개변수 설명

n일 동안 매일매일의 평균 기온이 순서대로 들은 배열 temperature, 두 날짜를 나타내는 자연수 A, B가 solution 함수의 매개변수로 주어집니다.

* temperature의 길이는 3 이상 30 이하입니다.
* temperature의 원소는 -30 이상 50 이하인 정수입니다.
* 날짜는 0번째 일부터 시작합니다.
* 즉, temperature의 첫 번째 원소는 0번째 날, 두 번째 원소는 1번째 날 ... 을 의미합니다.
* A, B는 날짜를 나타내는 정수이며, 0 이상 (temperature의 길이 - 1) 이하입니다.
* A는 B보다 항상 작습니다.

---
#####return 값 설명
 A 번째 일과 B 번째 일 사이에서 두 날짜보다 기온이 높았던 날은 총 며칠인지 return 해주세요.

---
#####예제

temperature A B  return
 [3, 2, 1, 5, 4, 3, 3, 2]  1 6 2

#####예제 설명

예제 #1
* 1번째 날 온도는 2입니다.
* 6번째 날 온도는 3입니다.
* 두 날짜 사이에서 두 날짜보다 기온이 높았던 날은 3번째, 4번째 날입니다.

따라서 2를 return 하면 됩니다.
 

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> temperature, int A, int B) {
    int answer = 0;
    for(int i = 0; i < temperature.size(); i++) {
        if(temperature[i] > temperature[A] && temperature[i] > temperature[B])
            answer += 1;
    }
    return answer;
}

int main() {
	vector<int> temperature = {3, 2, 1, 5, 4, 3, 3, 2};
	int A = 1;
	int B = 6;
	int ret = solution(temperature, A, B);

	cout << "solution ? " << ret << " " << endl;
}

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> temperature, int A, int B) {
    int answer = 0;
    for(int i = A + 1; i < B; i++){
        if(temperature[i] > temperature[A] && temperature[i] > temperature[B])
            answer += 1;
    }
    return answer;
}

 

 

문제 2

한 줄로 서 있는 사람들에게 종이를 다음과 같은 방법으로 나눠주려 합니다.

* 종이 K 장을 맨 앞사람에게 줍니다.
* 맨 앞사람은 자신이 필요한만큼 종이를 챙긴 후, 남은 종이를 뒷사람한테 전달합니다.
* 뒷사람 또한 자신이 필요한만큼 종이를 챙긴 후, 남은 종이를 뒷사람에게 전달합니다.
* 전달할 종이가 없거나, 모든 사람이 필요한 만큼 종이를 가질 때까지 계속해서 뒷사람에게 남은 종이를 전달합니다.

한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 배열 papers, 처음에 맨 앞사람에게 전달한 종이 수 K가 매개변수로 주어질 때, 필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어 있기 때문에 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

---
#####매개변수 설명

한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 배열 papers, 처음에 맨 앞사람에게 전달한 종이 수 K가 solution 함수의 매개변수로 주어집니다

* papers의 길이는 1 이상 20 이하입니다.
* papers의 각 원소는 1 이상 20 이하인 자연수입니다.
* K는 1 이상 400 이하인 자연수입니다.

---
#####return 값 설명

필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return 해주세요.

---
#####예시

papers  K return
[2, 4, 3, 2, 1]  10
[2, 4, 3, 2, 1] 14  5 

#####예시 설명

예시 #1

맨 앞 사람부터 순서대로 [2장, 4장, 3장, 2장, 1장]의 종이가 필요합니다.

* 맨 앞사람이 종이 2장을 가지고 남은 8장을 뒷사람에게 넘깁니다.
* 두 번째 사람이 종이 4장을 가지고 남은 4장을 뒷사람에게 넘깁니다.
* 세 번째 사람이 종이 3장을 가지고 남은 1장을 뒷사람에게 넘깁니다.
* 네 번째 사람은 종이 2장이 필요한데 넘어온 종이는 1장이므로 원하는 종이 개수만큼 가질 수 없습니다.
* 나머지 사람들도 종이를 원하는 개수만큼 가질 수 없습니다.

따라서 필요한 만큼의 종이를 받는 사람은 3명입니다.

예시 #2

모든 사람이 필요한 만큼의 종이를 받을 수 있습니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> papers, int K) {
	int length = papers.size();
	for(int i = 0; i < papers.size(); i++){
		K -= papers[i];
		if(K < 0)
			length = i;
	}
	return length;
}

int main() {
	vector<int> papers1 = {2, 4, 3, 2, 1};
	int K1 = 10;
	int ret1 = solution(papers1, K1);
	cout << "solution ? " << ret1 << " " << endl;

	vector<int> papers2 = {2, 4, 3, 2, 1};
	int K2 = 14;
	int ret2 = solution(papers2, K2);

	cout << "solution ? " << ret2 << " " << endl;
}

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> papers, int K) {
    for(int i = 0; i < papers.size(); i++){
        K -= papers[i];
        if(K < 0)
            return i;
    }
    return papers.size();
}

 

 

문제 3

단체 유니폼을 주문하려고 합니다. 사람들의 덩치를 수치로 표현할 때 주문해야 하는 유니폼의 사이즈는 다음과 같습니다.

덩치 사이즈
 95 미만 S
 95 이상 100 미만 M
 100 이상 105 미만  L 
105 이상  XL

사람들의 덩치를 담은 배열 people이 매개변수로 주어질 때, 주문해야 하는 유니폼 사이즈의 수를 [S, M, L, XL] 순으로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

---

#####매개변수 설명
사람들의 덩치를 담은 배열 people이 solution 함수의 매개변수로 주어집니다.
* people의 길이는 1 이상 100 이하인 자연수입니다.
* 사람들의 덩치는 80 이상 120 이하인 자연수입니다.

---

#####return 값 설명
주문해야 하는 유니폼 사이즈의 수를 [S, M, L, XL] 순으로 배열에 담아 return 합니다.

---

#####예시

people return 
 [97, 102, 93, 100, 107]  [1, 1, 2, 1]

#####예시 설명

3번째 사람은 S 사이즈를 입어야합니다.
1번째 사람은 M 사이즈를 입어야합니다.
2, 4번째 사람은 L 사이즈를 입어야합니다.
5번째 사람은 XL 사이즈를 입어야합니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> people) {
   vector<int> answer(4);
    return answer;
}

int main() {
    vector<int> people = {97, 102, 93, 100, 107};
    vector<int> ret = solution(people);

    cout << "solution ? {";
    for(int i = 0; i < 4; i++) {
        if(i != 0)
            cout << ", ";
        cout << ret[i];
    }
    cout << "} \n";
}

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> people) {
	vector<int> answer(4, 0);

	for(int i = 0; i < people.size(); i++)
		if(people[i] < 95)
			answer[0]++;
		else if(people[i] >= 95 && people[i] < 100)
			answer[1]++;
		else if(people[i] >= 100 && people[i] < 105)
			answer[2]++;
		else if(people[i] >= 105)
			answer[3]++;

	return answer;
}

 

 

문제 4

카드를 3장 뽑아 점수를 내는 게임을 하려고 합니다. 각 카드는 색이 칠해져 있고, 숫자가 적혀 있습니다.

획득한 점수를 계산하는 규칙은 다음과 같습니다.

```
1. 카드 3장의 색이 모두 같다면 획득한 점수는 적힌 숫자의 총합에 3을 곱한 값입니다.
2. 카드 2장의 색이 같고, 1장의 색이 다르다면 획득한 점수는 적힌 숫자의 총합에 2를 곱한 값입니다.
3. 카드 3장의 색이 모두 다르다면 획득한 점수는 적힌 숫자의 총합입니다.
```

뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards가 매개변수로 주어질 때, 획득한 총 점수를 return 하도록 solution 함수를 작성해주세요.

---

#####매개변수 설명
뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards가 solution 함수의 매개변수로 주어집니다.
* cards는 3x2 크기인 2차원 배열입니다.
* cards의 각 원소는 [색, 숫자] 입니다.
    * 카드의 색은 ["red", "black", "blue"] 중 하나입니다.
    * 카드에 적힌 숫자는 1 이상 9 이하인 자연수입니다.

---

#####return 값 설명
획득한 총 점수를 return 합니다.

---

#####예제

cards  return
 [["blue", "2"], ["red", "5"], ["black", "3"]]  10 
 [["blue", "2"], ["blue", "5"], ["black", "3"]]   20

#####예제 설명
예제 #1
모든 카드 색이 모두 다르기 때문에 획득한 점수는 적힌 숫자의 총합인 10 입니다.

예제 #2
두 카드 색이 같고, 1장의 색이 다릅니다. 따라서’ 획득한 점수는 적힌 숫자의 총합에 2를 곱한 20 입니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> cards) {
    int answer = 0;
    return answer;
}

int main() {
    vector<vector<string>> cards1 = {{"blue", "2"}, {"red", "5"}, {"black", "3"}};
    int ret1 = solution(cards1);
	
    cout << "solution ? " << ret1 << " " << endl;

    vector<vector<string>> cards2 = {{"blue", "2"}, {"blue", "5"}, {"black", "3"}};
    int ret2 = solution(cards2);
	
    cout << "solution ? " << ret2 << " " << endl;
}

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> cards) {
	int answer = 0;

	vector<int> count(3, 0);
	for(int i = 0; i < cards.size(); i++) {
		if(cards[i][0].compare("black") == 0)
			count[0]++;
		else if(cards[i][0].compare("blue") == 0)
			count[1]++;
		else if(cards[i][0].compare("red") == 0)
			count[2]++;
		answer += stoi(cards[i][1]);
	}

	if(count[0] == 3 || count[1] == 3 || count[2] == 3)
		answer *= 3;
	else if(count[0] == 2 || count[1] == 2 || count[2] == 2)
		answer *= 2;

	return answer;
}

 

 

문제 5

X 마트에서는 빈 병 n개와 음료수 한 병을 교환해줍니다.

예를 들어, 현재 가진 돈이 8원, 음료수 한 병은 2원이고 n이 4라면 음료수 4개를 살 수 있습니다. 음료수 네개를 다 마신 후, 남은 빈 병 4개를 가져가면 음료수를 한 병 더 받을 수 있습니다. 따라서 8원으로는 음료수를 총 5병 마실 수 있습니다.

가진 돈 money, 음료수 한 병의 가격 price, 음료수 한 병과 교환하는데 필요한 빈 병의 수 n이 매개변수로 주어질 때, 마실 수 있는 총 음료수의 수를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

---

#####매개변수 설명
가진 돈 money, 음료수 한 병의 가격 price, 음료수 한 병과 교환하는데 필요한 빈 병의 수 n이 solution 함수의 매개변수로 주어집니다.
* 가진 돈 money는 1 이상 1,000 이하인 자연수입니다.
* 음료수 한 병의 가격 price는 1 이상 100 이하인 자연수입니다.
* 음료수 한 병과 교환하는데 필요한 빈 병의  수 n은 3 이상 10 이하인 자연수입니다.

---

#####return 값 설명
마실 수 있는 총 음료수의 수를 return 해주세요.

---

#####예제

money  price  n return 
8  4 5
6 2 2 5

#####예제 설명
예제 #1
문제에 나온 예와 같습니다.

예제 #2
1. 6원으로 2원짜리 음료수 3개를 삽니다.
2. 음료를 다 마시면 빈 병 3개가 남습니다. 이 중 빈 병 두개를 가져가 새 음료수 한 병과 교환합니다.
3. 음료를 마시면 빈 병 2개가 남습니다. 이를 새 음료수 한 병으로 교환합니다.
따라서 총 6원으로는 음료수 5병을 마실 수 있습니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(int money, int price, int n) {
	int answer = 0;
	
	int empty_bottle = answer = money / price;
	while(n <= empty_bottle) {
		empty_bottle = empty_bottle + n;
		answer++;
		empty_bottle++;
	}

	return answer;
}

int main() {
	int money1 = 8;
	int price1 = 2;
	int n1 = 4;
	int ret1 = solution(money1, price1, n1);
    cout << "solution ? " << ret1 << " " << endl;

	int money2 = 6;
	int price2 = 2;
	int n2 = 2;
	int ret2 = solution(money2, price2, n2);

	cout << "solution ? " << ret2 << " " << endl;
}

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>

using namespace std;

int solution(int money, int price, int n) {
	int answer = 0;
	
	int empty_bottle = answer = money / price;
	while(n <= empty_bottle) {
		empty_bottle = empty_bottle - n;
		answer++;
		empty_bottle++;
	}

	return answer;
}

 

[ 출처 ] http://www.ybmit.comcos pro 샘플문제

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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