반응형

 

문제 6

X 사이트에서는 회원가입을 할 때 다음의 규칙을 지켜 비밀번호를 생성해야 합니다.

```
1. 한 개 이상의 알파벳 대문자를 포함해야 합니다.
2. 두 개 이상의 알파벳 소문자를 포함해야 합니다.
3. 두 개 이상의 숫자를 포함해야 합니다.
```

생성하고자 하는 비밀번호 password가 매개변수로 주어질 때, 생성가능한 비밀번호면 true를 그렇지 않으면 false를 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

---

#####매개변수 설명
생성하고자 하는 비밀번호 password가 solution 함수의 매개변수로 주어집니다.
* password는 알파벳 대문자, 소문자, 숫자로만 이루어진 문자열입니다.
* password의 길이는 5 이상 15 이하입니다.

---

#####return 값 설명
생성가능한 비밀번호면 true를 그렇지 않으면 false를 return 합니다.

---

#####예시

password  return
 "helloworld" false
 "Hello123"   true

#####예시 설명
예시 #1
알파벳 대문자와 숫자를 포함하지 않았습니다.

예시 #2
알파벳 대문자 1개, 알파벳 소문자 4개, 숫자 3개를 포함했으므로 생성할 수 있습니다.

[ 소스 코드 ]

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

using namespace std;

bool solution(string password) {
	bool answer;

	int capital_count = 0, small_count = 0, digit_count = 0;
	for(int i = 0; i < password.length(); i++) {
		if(password[i] >= 'A' && password[i] <= 'Z')
			capital_count++;
		else if(password[i] >= 'a' && password[i] <= 'z')
			small_count++;
		else if(password[i] >= @@@ && password[i] <= @@@)
			digit_count++;
	}

	if(@@@)
		answer = true;
	else
		answer = false;

	return answer;
}

int main() {
	string password1 = "helloworld";
	bool ret1 = solution(password1);

	cout << "solution ? " << (ret1 ? "true" : "false") << " " << endl;

	string password2 = "Hello123";
	bool ret2 = solution(password2);

	cout << "solution ? " << (ret2 ? "true" : "false") << " " << endl;
}

 

[ 정답 보기 ]

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

using namespace std;

bool solution(string password) {
	bool answer;

	int capital_count = 0, small_count = 0, digit_count = 0;
	for(int i = 0; i < password.length(); i++) {
		if(password[i] >= 'A' && password[i] <= 'Z')
			capital_count++;
		else if(password[i] >= 'a' && password[i] <= 'z')
			small_count++;
		else if(password[i] >= '0' && password[i] <= '9')
			digit_count++;
	}

	if(capital_count >= 1 && small_count >= 2 && digit_count >= 2)
		answer = true;
	else
		answer = false;

	return answer;
}

 

문제 7

예산 내에서 의자와 책상을 하나씩 사려고 합니다. 이때, 의자와 책상 가격의 합이 가장 크게 사려고 합니다.

예를 들어, 돈을 7원을 가지고 있고 의자의 가격이 [2, 5], 책상의 가격이 [4, 3, 5]일 때, 첫번째 의자와 세번째 책상을 구매하면 가격의 합이 7원이고, 이때 의자와 책상 가격의 합이 가장 큽니다.

예산 money, 의자의 가격이 담긴 배열 chairs, 책상의 가격이 담긴 배열 desks가 매개변수로 주어집니다. 이때 예산으로 감당할 수 있는 의자와 책상 가격 합의 최댓값을 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

---

#####매개변수 설명
예산 money, 의자의 가격이 담긴 배열 chairs, 책상의 가격이 담긴 배열 desks가 solution 함수의 매개변수로 주어집니다.
* 예산 money는 1 이상 1,000 이하인 자연수입니다.
* 의자와 책상의 가격은 1 이상 1,000 이하인 자연수입니다.
* chairs와 desks의 길이는 1 이상 100 이하입니다.

---

#####return 값 설명

의자와 책상을 하나씩 살때, 예산으로 감당할 수 있는 의자와 책상 가격 합의 최댓값을 return 합니다.

* 단, 가지고 있는 금액으로 의자와 책상을 하나씩 살 수 없는 경우에는 0을 return 합니다.

---

#####예제

money  chairs desks return
7 [2, 5]  [4, 3, 5]  7 
7 [3]  [5]  0

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

예제 #2
3원짜리 의자와 5원짜리 책상을 구매하면 8원이 듭니다. 이는 예산 7원을 초과하기때문에 0을 return 합니다.

[ 소스 코드 ]

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int solution(int money, vector<int> chairs, vector<int> desks) {
	int answer = 0;
	
	for(int i = 0; i < chairs.size(); i++) {
		for(int j = 0; j < desks.size(); j++) {
			int price = @@@;
			if(answer < price && @@@)
				answer = price;
		}
	}

	return answer;
}

int main() {
	int money1 = 7;
	vector<int> chairs1 = {2, 5};
	vector<int> desks1 = {4, 3, 5};
	int ret1 = solution(money1, chairs1, desks1);

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

	int money2 = 7;
	vector<int> chairs2 = {3};
	vector<int> desks2 = {5};
	int ret2 = solution(money2, chairs2, desks2);

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

 

[ 정답 보기 ]

더보기
#include <string>
#include <vector>
using namespace std;

int solution(int money, vector<int> chairs, vector<int> desks) {
	int answer = 0;
	
	for(int i = 0; i < chairs.size(); i++) {
		for(int j = 0; j < desks.size(); j++) {
			int price = chairs[i] + desks[j];
			if(answer < price && price <= money)
				answer = price;
		}
	}

	return answer;
}

 

문제 8

주어진 수와 주어진 수를 뒤집은 수와의 차를 계산하려고 합니다.

예를 들어, 주어진 수가 120인 경우 이를 뒤집으면 021입니다. 십진수에서 앞의 0은 제거해야하므로 120을 뒤집은 수는 21입니다. 따라서 120과 21의 차는 99 입니다.

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

```
1. 주어진 수의 자릿수를 구합니다.
2. 구한 자릿수를 이용하여 주어진 수를 거꾸로 뒤집습니다.
3. 주어진 수와 뒤집은 수의 차이를 구합니다.
```

수 number가 주어질 때, 주어진 수와 주어진 수를 뒤집은 수와의 차를 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

---

#####매개변수 설명
수 number가 solution 함수의 매개변수로 주어집니다.
* 수 number는 1 이상 10,000 이하인 정수입니다.

---

#####return 값 설명
주어진 수 number와 number를 뒤집은 수와의 차를 return 합니다.

---

#####예제

number return
120 99
23

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

예제 #2
23을 반대로 뒤집으면 32가 되고 이때 두 수의 차는 9 입니다.

[ 소스 코드 ]

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

using namespace std;

int func_a(int number1, int number2) {
	int ret = 0;

	if(number1 > number2)
		ret = number1 - number2;
	else
		ret = number2 - number1;

	return ret;
}

int func_b(int number) {
	int ret = 0;

	while(number != 0) {
		number = number / 10;
		ret++;
	}

	return ret;
}

int func_c(int number, int digit) {
	int ret = 0;

	for(int i = 0; i < digit; i++) {
		int temp = number % 10;
		number = number / 10;
		ret = ret * 10 + temp;
	}

	return ret;
}

int solution(int number) {
	int answer = 0;
	int digit = func_@@@(@@@);
	int convert_number = func_@@@(@@@);
	answer = func_@@@(@@@);
	return answer;
}

int main() {
	int number1 = 120;
	int ret1 = solution(number1);

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

	int number2 = 23;
	int ret2 = solution(number2);

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

 

[ 정답 보기 ]

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

using namespace std;

int func_a(int number1, int number2) {
	int ret = 0;

	if(number1 > number2)
		ret = number1 - number2;
	else
		ret = number2 - number1;

	return ret;
}

int func_b(int number) {
	int ret = 0;

	while(number != 0) {
		number = number / 10;
		ret++;
	}

	return ret;
}

int func_c(int number, int digit) {
	int ret = 0;

	for(int i = 0; i < digit; i++) {
		int temp = number % 10;
		number = number / 10;
		ret = ret * 10 + temp;
	}

	return ret;
}

int solution(int number) {
	int answer = 0;
	int digit = func_b(number);
	int convert_number = func_c(number, digit);
	answer = func_a(number, convert_number);
	return answer;
}

 

문제 9

다양한 색을 가진 양말 중 같은 색을 가진 양말을 2개씩 묶어 한 쌍을 만드려고 합니다.

예를 들어, 가지고 있는 양말의 색깔이 [빨강, 파랑, 빨강, 노랑, 파랑, 빨강] 이라면 아래 그림과 같이 2쌍을 만들 수 있습니다.


 
양말 색을 숫자로 표현해서 담은 배열 socks가 매개변수로 주어질 때, 양말을 몇 쌍 만들 수 있는지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

---

#####매개변수 설명
양말 색을 숫자로 표현해서 담은 배열 socks가 solution 함수의 매개변수로 주어집니다.
* 양말 색은 0 보다 크거나 같고 10 보다 작은 정수로 표현합니다.
* 양말 수는 1개 이상 100개 이하입니다.

---

#####return 값 설명
양말을 몇 쌍 만들 수 있는지 return 합니다.

---

#####예시

socks return
[1, 2, 1, 3, 2, 1]  2 

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

[ 소스 코드 ]

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

using namespace std;

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

	vector<int> count(10, 0);
	for(int i = 0; i < socks.size(); i++)
		count[socks[i]]++;

	for(int i = 0; i < 10; i++)
		answer += (count[i] % 2);

	return answer;
}

int main() {
	vector<int> socks = {1, 2, 1, 3, 2, 1};
	int ret = solution(socks);

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

 

[ 정답 보기 ]

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

using namespace std;

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

	vector<int> count(10, 0);
	for(int i = 0; i < socks.size(); i++)
		count[socks[i]]++;

	for(int i = 0; i < 10; i++)
		answer += (count[i] / 2);

	return answer;
}

 

문제 10

불량 사과 상자가 몇 박스인지 알아보려 합니다. 사과 한 박스의 표준 무게는 weight이며, 표준 무게와 비교해 무게가 오차 10% 이내인 사과 박스는 정상품으로, 오차가 그보다 많은 사과 박스는 불량품으로 판정합니다.

예를 들어, 표준 무게가 600이라면 무게가 540 이상 660 이하인 사과 상자만 정상품입니다. 판정해야 할 사과 상자의 무게가 각각 [653, 670, 533, 540, 660]로 주어진다면 무게가 670, 533인 상자는 불량품입니다. 따라서 주어진 상자 중 불량품은 2개입니다.

표준 무게 weight와 판정해야 할 사과 상자의 무게가 담긴 배열 boxes가 매개변수로 주어질 때, 불량품 개수를 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

---

#####매개변수 설명
표준 무게 weight와 판정해야 할 사과 상자의 무게가 담긴 배열 boxes가 solution 함수의 매개변수로 주어집니다.

* 표준 무게는 500 이상 10,000 이하입니다.
* 표준 무게는 항상 10으로 나누어 떨어집니다.
* 판정해야 할 사과 상자의 개수는 1개 이상 20개 이하입니다.
* 판정해야 할 사과 상자의 무게는 400 이상 12,000 이하입니다.

---

#####return 값 설명
불량품 개수를 return 해주세요.

---
#####예시

weight boxes return
600 [653, 670, 533, 540, 660] 2


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

[ 소스 코드 ]

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

using namespace std;

int solution(int weight, vector<int> boxes) {
    int answer = 0;

	for(int i = 0; i < boxes.size(); i++)
		if(@@@)
			answer++;
	
    return answer;
}

int main() {
    int weight = 600;
    vector <int> boxes = {653, 670, 533, 540, 660};
    int ret = solution(weight, boxes);
    
   cout << "solution ? " << ret << " " << endl;
}

 

[ 정답 보기 ]

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

using namespace std;

int solution(int weight, vector<int> boxes) {
    int answer = 0;

	for(int i = 0; i < boxes.size(); i++)
		if(boxes[i] < weight * 9 / 10 || boxes[i] > weight * 11 / 10)
			answer++;
	
    return answer;
}

 

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

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