반응형
문제 1

학생들의 시험 점수가 주어졌을 때, n번 학생이 몇 등인지 구하려 합니다. 학번은 0번부터 시작하며, 시험 점수는 학번순으로 주어집니다.

예를 들어 학생 네 명의 시험 점수가 다음과 같은 경우

3번 학생은 3등을 했습니다.

이를 위해 다음과 같이 프로그램 구조를 작성했습니다.

~~~
1. n번 학생의 점수를 변수에 저장합니다.
2. 점수를 내림차순으로 정렬합니다.
3. 배열의 첫 번째 원소부터 마지막 원소까지 순회하며 n번 학생의 점수를 찾습니다.
  3-1. 1번 단계에서 저장해둔 점수와 같은 점수를 찾으면 등수를 return 합니다.
~~~

학생들의 시험 점수가 번호순으로 들은 배열 scores와 학번 n이 solution 함수의 매개변수로 주어질 때, n번 학생의 등수를 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작하도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

---
#####매개변수 설명
학생들의 시험 점수가 번호순으로 들은 배열 scores와 학번 n이 solution 함수의 매개변수로 주어집니다.
* scores의 길이는 1 이상 100 이하입니다.
* 점수는 0점 이상 100점 이하이며 동점자는 없습니다.
* n은 0 이상 (scores의 길이 - 1) 이하의 정수입니다.

---
#####return 값 설명
n번 학생의 등수를 return 해주세요.

---
#####예시

 scores  n result
[20, 60, 98, 59] 3 3

 

#####예시 설명

* 3번 학생의 점수는 59점입니다.
* 점수를 내림차순으로 정렬하면 [98, 60, 59, 20]입니다.
* 정렬된 점수에서 59는 3번째에 있습니다.

따라서 3번 학생은 3등입니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>

using namespace std;

int func_a(vector<int> scores, int score){
    int length = scores.size();
    for(int rank = 0; rank < length; rank++)
        if(scores[rank] == score)
            return rank + 1;
    return 0;
}

vector<int> func_b(vector<int> arr){
    sort(arr.begin(), arr.end(), greater<int>());
    return arr;
}

int func_c(vector<int> arr, int n){
    return arr[n];
}

int solution(vector<int> scores, int n) {
    int score = func_@@@(@@@);
    vector<int> sorted_scores = func_@@@(@@@);
    int answer = func_@@@(@@@);
    return answer;
}

int main() {
    vector<int> scores = {20, 60, 98, 59};
    int n = 3;
    int ret = solution(scores, n);

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

 

[ 정답 보기 ]

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

using namespace std;

int func_a(vector<int> scores, int score){
    int length = scores.size();
    for(int rank = 0; rank < length; rank++)
        if(scores[rank] == score)
            return rank + 1;
    return 0;
}

vector<int> func_b(vector<int> arr){
    sort(arr.begin(), arr.end(), greater<int>());
    return arr;
}

int func_c(vector<int> arr, int n){
    return arr[n];
}

int solution(vector<int> scores, int n) {
    int s = func_c(scores, n);
    vector<int> sorted_scores = func_b(scores);
    int answer = func_a(sorted_scores, s);
    return answer;
}

 

 

문제 2

모 학교에서는 학기가 끝날 때마다 장학금을 줍니다. 이때 장학생이 몇 명인지 구하려고 합니다. 장학금을 주는 조건은 다음과 같습니다.

1. 이번 학기 성적이 80점 이상(100점 만점)이면서 석차가 상위 10% 이내인 학생
2. 이번 학기 성적이 80점 이상이면서 1등인 학생
3. 직전 학기 대비 성적이 가장 많이 오른 학생(여러 명인 경우 해당 학생 전부)

단, 동점인 학생들은 등수가 같으며, 중복 수혜는 불가합니다.

장학생이 몇 명인지 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다.

~~~
1. 이번 학기 성적을 기준으로 학생별 석차를 구합니다.
2. 각 학생의 (이번 학기 성적 - 직전 학기 성적) 중 최댓값을 구합니다.
3. 아래 조건을 만족하는 학생을 발견하면, 장학생 수를 1 증가시킵니다.
 3-1. 이번 학기 성적이 80점 이상이고, 석차가 상위 10% 이내인 경우
 3-2. 또는 이번 학기 성적이 80점 이상이고, 석차가 1등인 경우
 3-3. 또는 (이번 학기 성적 - 직전 학기 성적)이 2단계에서 구한 값과 같고, 그 값이 양수인 경우
4. 장학생 수를 return 합니다.
~~~

학생들의 이번 학기 성적을 담고 있는 배열 current_grade, 직전 학기 성적을 담고 있는 배열 last_grade가 매개변수로 주어질 때, 장학생 수를 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

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

학생들의 이번 학기 성적, 지난 학기 성적이 들어있는 배열 current_grade, last_grade가 solution 함수의 매개변수로 주어집니다.
* current_grade의 길이와 last_grade의 길이는 같으며, 길이는 1 이상 200 이하입니다.
* current_grade와 last_grade의 원소는 0 이상 100 이하인 정수입니다.

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

장학생 수를 return 해주세요.

---
#####예시

current_grade last_grade  return
[70, 100, 70, 80, 50, 95]  [35, 65, 80, 50, 20, 60]  3

#####예시 설명

학생 수가 10명보다 적으므로, 1등이 장학금을 받습니다. 
직전 학기 대비 성적이 가장 많이 오른 학생은 다음과 같이 3명입니다.

* 35 → 70점
* 65 → 100점
* 60 → 95점

이때, 두 번째 학생은 이번 학기 1등 장학금을 이미 받아 중복 수혜가 불가하고, 나머지 두 학생은 장학금을 받을 수 있습니다. 따라서 장학금을 받는 학생은 총 3명입니다.

[ 소스 코드 ]

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

using namespace std;

int func_a(vector<int> current_grade, vector<int> last_grade, vector<int> rank, int max_diff_grade) {
    int arr_length = current_grade.size();
    int count = 0;
    for (int i = 0; i < arr_length; i++) {
        if (current_grade[i] >= 80 && rank[i] <= arr_length / 10)
            count++;
        else if (current_grade[i] >= 80 && rank[i] == 1)
            count++;
        else if (max_diff_grade == current_grade[i] - last_grade[i])
            count++;
    }
    return count;
}

vector<int> func_b(vector<int> current_grade) {
    int arr_length = current_grade.size();
    vector<int> rank(arr_length, 1);
    for (int i = 0; i < arr_length; i++)
        for (int j = 0; j < arr_length; j++)
            if (current_grade[i] < current_grade[j])
                rank[i]++;
    return rank;
}

int func_c(vector<int> current_grade, vector<int> last_grade) {
    int max_diff_grade = 1;
    for (int i = 0; i < current_grade.size(); i++) {
        if (max_diff_grade < current_grade[i] - last_grade[i])
            max_diff_grade = current_grade[i] - last_grade[i];
    }
    return max_diff_grade;
}

int solution(vector<int> current_grade, vector<int> last_grade) {
    vector<int> rank = func_@@@(@@@);
    int max_diff_grade = func_@@@(@@@);
    int answer = func_@@@(@@@);
    return answer;
}

int main() {
    vector<int> current_grade = {70, 100, 70, 80, 50, 95};
    vector<int> last_grade = {35, 65, 80, 50, 20, 60};
    int ret = solution(current_grade, last_grade);

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

 

[ 정답 보기 ]

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

using namespace std;

int func_a(vector<int> current_grade, vector<int> last_grade, vector<int> rank, int max_diff_grade) {
    int arr_length = current_grade.size();
    int count = 0;
    for (int i = 0; i < arr_length; i++) {
        if (current_grade[i] >= 80 && rank[i] <= arr_length / 10)
            count++;
        else if (current_grade[i] >= 80 && rank[i] == 1)
            count++;
        else if (max_diff_grade == current_grade[i] - last_grade[i])
            count++;
    }
    return count;
}

vector<int> func_b(vector<int> current_grade) {
    int arr_length = current_grade.size();
    vector<int> rank(arr_length, 1);
    for (int i = 0; i < arr_length; i++)
        for (int j = 0; j < arr_length; j++)
            if (current_grade[i] < current_grade[j])
                rank[i]++;
    return rank;
}

int func_c(vector<int> current_grade, vector<int> last_grade) {
    int max_diff_grade = 1
    for (int i = 0; i < current_grade.size(); i++) {
        if (max_diff_grade < current_grade[i] - last_grade[i])
            max_diff_grade = current_grade[i] - last_grade[i];
    }
    return max_diff_grade;
}

int solution(vector<int> current_grade, vector<int> last_grade) {
    vector<int> rank = func_b(current_grade);
    int max_diff_grade = func_c(current_grade, last_grade);
    int answer = func_a(current_grade, last_grade, rank, max_diff_grade);
    return answer;
}

 

문제 3

체조선수는 여러 심사위원의 점수 중 가장 높은 점수 하나와 가장 낮은 점수 하나를 제외하고 나머지 점수들의 평균을 계산하여 최종점수를 받습니다. _단, 이때 소수점 이하의 수는 버립니다._

예를 들어, A 선수가 10명의 심사위원에게 [35, 28, 98, 34, 20, 50, 85, 74, 71, 7]의 점수를 받았습니다. 가장 높은 점수인 98점과 가장 낮은 점수인 7점을 제외하고 나머지 8명의 심사위원 점수 평균을 구하면 49.625점입니다. 여기서 소수점 이하의 수를 버리면 49점입니다. 

각 심사위원이 매긴 점수가 담긴 배열 scores가 매개 변수로 주어질 때, 이 선수가 받은 점수를 return 하도록 solution 함수를 작성해주세요.

---
#####매개변수 설명
심사위원이 준 점수가 들어있는 배열 scores가 solution 함수의 매개변수로 주어집니다.
* scores의 길이는 3 이상 100 이하입니다.
* 심사위원이 부여하는 점수의 범위는 0 이상 100 이하의 정수입니다.

---
#####return 값 설명
심사위원이 준 점수 중 가장 높은 점수와 가장 낮은 점수를 제외한 점수의 평균에서 소수점을 버린 값을 return 합니다.

---
#####예시

 scores   return
 [35, 28, 98, 34, 20, 50, 85, 74, 71, 7] 49 
 [1, 1, 1, 1, 1]   1

 

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

예시 #2
가장 높은 점수는 1점이며, 가장 낮은 점수도 1점입니다. 1점을 두 개 제외한 나머지 점수의 합은 3점이며, 평균은 1점이 됩니다.

[ 소스 코드 ]

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

using namespace std;

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

int main() {
    vector<int> scores1 = {35, 28, 98, 34, 20, 50, 85, 74, 71, 7};
    int ret1 = solution(scores1);
    
   cout << "solution ? " << ret1  << endl;
    
    vector<int> scores2 = {1, 1, 1, 1, 1};
    int ret2 = solution(scores2);
    
  cout << "solution ? " << ret2 << endl;
}

 

[ 정답 보기 ]

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

using namespace std;

int solution(vector<int> scores) {
    int answer = 0;
    
    int max = 0;
    int min = 100;
    int sum = 0;
    
    for(int i = 0; i < scores.size(); ++i) {
        if(max < scores[i])
            max = scores[i];
        if(min > scores[i])
            min = scores[i];
        
        sum = sum + scores[i];
    }
    
    sum = sum - (max + min);
    answer = sum / (scores.size() - 2);
    
    return answer;
}

 

 

문제 4

영어 단어를 외우기 위해 단어를 반복하여 타이핑합니다. 그런데, 타이핑하고 보니 오타가 많습니다. 오타를 수정하려면 문자를 몇 개 바꿔야 하는지 구하려 합니다.

예를 들어, "CODE"라는 단어를 3번 타이핑했더니 ["CODE", "COED", "CDEO"] 가 적혀있었습니다.

```
1. "CODE"는 바르게 적혔습니다.
2. "COED"는 E와 D를 각각 D와 E로 바꾸면 됩니다.
3. "CDEO"는 D, E, O를 각각 O, D, E로 바꾸면 됩니다.
따라서 바꿔야 하는 문자는 총 5개입니다.
```

타이핑한 단어를 담은 배열 words와 원래 치려 한 단어인 word가 주어질 때 바꿔야 하는 문자 개수를 return 하도록 solution 함수를 완성해주세요.

---
#####매개변수 설명
타이핑한 단어를 담은 배열 words와 원래 치려 한 단어인 word가 solution 함수의 매개변수로 주어집니다.
* word는 10개 이하의 알파벳 대문자로만 이루어진 단어입니다.
* words에 담긴 문자열의 길이는 word의 길이와 같으며 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
* words에 담긴 문자열의 개수는 15 이하 자연수입니다.

---
#####return 값 설명
바꾸어야 하는 문자 수를 return 해주세요.

---
#####예시

words  word  return
["CODE", "COED", "CDEO"] "CODE"

 

[ 소스 코드 ]

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

using namespace std;

int solution(vector<string> words, string word) {
    int count = 0;
    return count;
}

int main() {
    vector<string> words = {"CODE", "COED", "CDEO"};
    string word = "CODE";
    int ret = solution(words, word);
    
    cout << "solution ?" << ret <<  endl;
}

 

[ 정답 보기 ]

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

using namespace std;

int solution(vector<string> words, string word) {
    int count = 0;
    
    for(int i = 0; i < words.size(); i++) {
        for(int j = 0; j < words[i].size(); j++) {
            if(words[i].at(j) != word.at(j)) {
                count++;
            }
        }
    }
    return count;
}

 

문제 5

여행객들의 총 교통비를 계산하려고 합니다. 교통편은 "Bus", "Ship", "Airplane" 총 3가지입니다. 나이가 20살 이상이면 어른 요금을, 그렇지 않으면 어린이 요금을 받습니다. 각 교통편별 가격은 다음과 같습니다.

 

  어른 어린이 
Bus  40,000원 15,000원
Ship   30,000원 13,000원
Airplane 70,000원 45,000원

여행객들이 10명 이상인 경우 연령에 따라 할인을 받습니다.

어른 어린이
10%  20%

 

여행객들의 나이를 담고 있는 배열 member_age와 교통편인 transportation이 매개변수로 주어질 때, 총 교통비를 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

---
#####매개변수 설명
여행객들의 나이를 담고 있는 배열 member_age와 교통편인  transportation이 solution 함수의 매개변수로 주어집니다.

* member_age의 길이는 1 이상 1,000 이하입니다.
* member_age의 원소는 1 이상 100 이하입니다.
* transportation은 "Bus" 또는 "Ship" 또는 "Airplane" 입니다.

---
#####return값 설명
교통비 총액을 return 해주세요.

---
#####예시

member_age transportation return
[13, 33, 45, 11, 20]  "Bus" 150000
[25, 11, 27, 56, 7, 19, 52, 31, 77, 8] "Ship" 203600

 

#####예시 설명
예시 #1
여행객들의 나이는 [13, 33, 45, 11, 20]이고 교통수단으로는 "Bus"를 이용하려합니다. 나이가 20살 미만인 인원은 2명으로 어린이 요금은 30,000원이고 나이가 20살 이상인 인원은 3명으로 어른 요금은 120,000원입니다. 따라서 교통비 총액은 150,000원입니다.

예시 #2
여행객들의 나이는 [25, 11, 27, 56, 7, 19, 52, 31, 77, 8]이고 교통수단으로는 "Ship"을 이용하려합니다. 여행객들이 10명 이상이므로 교통비가 할인됩니다. 나이가 20살 미만인 인원은 4명으로 어린이 요금은 41,600원이고 나이가 20살 이상인 인원은 6명으로 어른 요금은 162,000원입니다. 따라서 교통비 총액은 203,600원입니다.


[ 소스 코드 ]

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

using namespace std;

int solution(vector<int> member_age, string transportation) {
	int adult_expense = 0;
	int child_expense = 0;

	if(transportation == "Bus"){
		adult_expense = 40000;
		child_expense = 15000;
	}
	else if(transportation == "Ship"){
		adult_expense = 30000;
		child_expense = 13000;
	}
	else if(transportation == "Airplane"){
		adult_expense = 70000;
		child_expense = 45000;
	}

	if(member_age.size() >= 10){
		adult_expense = @@@;
		child_expense = @@@;
	}
	int total_expenses = 0;
	for(int i = 0; i < member_age.size(); i++) {
		if(@@@)
			total_expenses += adult_expense;
		else
			total_expenses += child_expense;
	}
	return total_expenses;
}

int main() {
    vector<int> member_age1 = {13, 33, 45, 11, 20};
    string transportation1 = "Bus";
    int ret1 = solution(member_age1, transportation1);

    cout << "solution ? " << ret1 << endl;

    vector<int> member_age2 = {25, 11, 27, 56, 7, 19, 52, 31, 77, 8};
    string transportation2 = "Ship";
    int ret2 = solution(member_age2, transportation2);

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

 

[ 정답 보기 ]

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

using namespace std;

int solution(vector<int> member_age, string transportation) {
	int adult_expense = 0;
	int child_expense = 0;

	if(transportation == "Bus")
	{
		adult_expense = 40000;
		child_expense = 15000;
	}
	else if(transportation == "Ship")
	{
		adult_expense = 30000;
		child_expense = 13000;
	}
	else if(transportation == "Airplane")
	{
		adult_expense = 70000;
		child_expense = 45000;
	}

	if(member_age.size() >= 10)
	{
		adult_expense = adult_expense / 10 * 9;
		child_expense = child_expense / 10 * 8;
	}

	int total_expenses = 0;
	for(int i = 0; i < member_age.size(); ++i) 
	{
		if(member_age[i] > 19)
			total_expenses += adult_expense;
		else
			total_expenses += child_expense;
	}
	return total_expenses;
}

 

 

[ 출처 ] www.ybmit.com   cos pro 샘플문제

 

 

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