본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.59] 6차 문제 9 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 30.
반응형

6차 문제 9


문제 설명

 

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

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

 

양말 색을 숫자로 표현해서 담은 배열 socks, socks의 길이 socks_len이 매개변수로 주어질 때, 양말을 몇 쌍 만들 수 있는지 return 하도록 solution 함수를 작성했습니다. 

그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.


예시

 

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

수정해야 할 코드

더보기
int solution(int socks[], int socks_len) {
	int answer = 0;

	int* count = (int*)malloc(sizeof(int) * 10);
	memset(count, 0, sizeof(int) * 10);

	for (int i = 0; i < socks_len; i++)
		count[socks[i]]++;

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

	return answer;
}

 

수정

answer += (count[i] % 2);
→ answer += (count[i] / 2);

 

양말 2개에 한 짝을 이루므로 answer에는 count[i]가 2의 배수이고 배수마다 1을 증가시켜야 한다. 

count[i]를 2로 나눈 나머지 값을 넣을 경우엔 구하고자 한 값과 일치하지 않은 값이 들어가게 된다. 

i 0 1 2 3 4 ...
count[i] 0 3 2 1 0 ...
count[i] % 2 0 % 2 
= 0
3 % 2
= 1
2 % 2
= 0
1 % 2
= 1
0 % 2
= 0
...

count[1]일 때 한 켤레가 완성되므로 +1, count[2]일 때 한 켤레가 완성되므로 +1해서 총 2가 되어야 하지만

count[i] % 2를 할 경우 count[1] % 2의 나머지 값인 1, count[3] % 2의 나머지값인 1이 더해져 총 2가 된다.

 

구하고자 하는 방식과 다른 방식으로 계산되었고,

짝이 지어졌을 때가 아닌 짝을 짓고 남은 값이 더해지므로 정확하지 않은 결과가 나온다. 

 

코드 해석 및 전체 코드

 

양말의 색은 10가지로 cout의 배열 길이를 10으로 잡는다. 

 

첫 번째 for문에서는 socks_len만큼 반복하여

socks [i]의 원소의 count 배열 방을 1 증가시킨다.

i 0 1 2 3 4 5
socks[i] 1 2 1 3 2 1
count[i]++ count[1]++ count[2]++ count[1]++ count[2]++ count[2]++ count[1]++

count 배열은 [0, 3, 2, 1, 0, 0, 0, 0, 0, 0]이다. 

 

두 번째 for문은 짝이 있는 양말의 개수를 구하기 위해 양말 종류의 개수인 10만큼 반복한다. 

양말은 2개가 한 켤레를 이루므로 count[i]를 2로 나눈 값을 answer에 더한다. 

i 0 1 2 3 4 ...
count[i] 0 3 2 1 0 ...
count[i] / 2 0 / 2 
= 0
3 / 2
= 1
2 / 2
= 1
1 / 2
= 0
0 / 2
= 0
...

count[1]이 3이므로 양말 한 켤레가 완성되고, count[2]이 2이므로 양말 한 켤레가 완성되어

총 answer는 2이다. 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int socks[], int socks_len) {
	int answer = 0;

	int* count = (int*)malloc(sizeof(int) * 10);
	memset(count, 0, sizeof(int) * 10);

	for (int i = 0; i < socks_len; i++)
		count[socks[i]]++;

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

	return answer;
}

int main() {
	int socks[] = { 1, 2, 1, 3, 2, 1 };
	int socks_len = 6;
	int ret = solution(socks, socks_len);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 


cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

 

반응형

댓글