본문 바로가기

cospro2급/cospro_6차

2021-05-31 / 9번 문제

문제 설명

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

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

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

 

매개변수 설명

양말 색을 숫자로 표현해서 담은 배열 socks, socks의 길이 socks_len이 solution 함수의 매개변수로 주어진다.

   양말 색은 0 보다 크거나 같고 10 보다 작은 정수로 표현한다.

   socks_len은 1 이상 100 이하이다.

 

return 값 설명

양말을 몇 쌍 만들 수 있는지 return 한다.

 

예시

 

코드 설명

#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]]++;	//양말의 수가 같은 값을 count에 넣어줌

	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);
}

 

count[socks[i]]++;

고치기 전에는 count[i]++; 이었는데 만약 이 상태로 돌리게 되면 그냥 1을 추가하는 문장이다. 바로 위 memset에서 모두 0으로 초기화 해줬기 때문이다. count의 목적은 양말색이 같은 값을 넣어주는 것인데 그러기 위해선 count의 방번호와 socks의 값이 같은 값을 넣어준다. 그래서 count[socks[i]]++; 인 문장을 사용한다.

 

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

고치기 전에는 /가 아닌 %이다. 양말의 쌍이라는 것을 2로 나눴을 때 딱 떨어지는 값이어야 하는데 나머지로 계산할 경우 쌍이 되지 못한 값이 들어간다.

 

 

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

'cospro2급 > cospro_6차' 카테고리의 다른 글

2021-05-31 / 4번 문제  (0) 2021.05.31
2021-05-30 / 6번 문제  (0) 2021.05.30
2021-05-30 / 7번 문제  (0) 2021.05.30
2021-05-30 / 5번 문제  (0) 2021.05.30
2021-05-30 / 10번 문제  (0) 2021.05.30