문제 설명
다양한 색을 가진 양말 중 같은 색을 가진 양말을 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로 나눴을 때 딱 떨어지는 값이어야 하는데 나머지로 계산할 경우 쌍이 되지 못한 값이 들어간다.
'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 |