시공의 폭풍 속으로 ⭐1

Eugenie·2021년 4월 8일
0

solve_problem

목록 보기
1/2

위클리 비타알고 시즌2 코딩테스트 대비 입문편

시공의 폭풍은 87명의 영웅들 중
각 팀별로 5명씩 골라 총 10명이 플레이하는 게임이다.
당신의 팀원들이 선택한 4명의 영웅들과
당신이 선택하길 원하는 영웅 5명의 번호가 주어졌을 때,
선택할 수 있는 영웅이 몇 명인지 세어보자.

✔️ 입력

첫 번째 줄에는 당신의 팀원들이 선택한 4명의 영웅 번호가
중복없이 공백으로 구분되어 주어진다.
두 번째 줄에는 당신이 선택하고자 하는 5명의 영웅 번호가
중복없이 공백으로 구분되어 주어진다.

✔️ 출력

당신이 선택하고자 하는 영웅들 중 선택할 수 있는,
즉 이미 팀원이 선택한 영웅이 아닌 영웅의 수를 출력한다.


💡 example1

input
1 5 7 10
1 2 3 4 5
output
3

💡 example2

input
1 2 3 4
1 2 3 4 5
output
1

🔑 해설

입력값은 총 두 가지가 들어오게 된다.
첫 번째 줄은 팀원들이 선택한 4명의 영웅 번호가
중복없이 공백으로 구분되어 주어진다.
이 값들을 받아주기 위해서 selected_arr 이라는 배열을 선언해주었다.

int	selected_arr[4] = {0, };

두 번째 줄은 내가 선택하고 싶은 영웅 5명의 번호가
중복없이 공백으로 구분되어 주어진다.
이 값들 또한 받아주기 위해 arr 이라는 배열을 선언해주었다.

int	arr[5] = {0, };

출력값은 팀원들이 선택한 영웅들의 번호 4가지와
내가 선택하고 싶은 영웅들의 번호 5가지를 비교하여
중복되지 않는 갯수만큼을 세어주면 된다.

이에 대한 변수는 counts 라고 선언해주고,
기본값으로 5를 대입해두었다.
이 이유는, 두 종류의 입력값들을 비교했을 때,
완전히 중복되지 않는 경우 최댓값이 5 이기 때문이다.
그러므로, 중복되는 경우가 생길 때마다 -1 연산을 해주면 된다.


이제 본격적으로 값을 받아 저장해보자.

// 첫 번째 줄의 입력값들
for (int i = 0; i < 4; i++)
	scanf("%d", &selected_arr[i]);
// 두 번째 줄의 입력값들
for (int i = 0; i < 5; i++)
	scanf("%d", &arr[i]);

⚠️scanf 함수의 형식에는 & 가 필요하다. (printf 함수의 형식을 혼동하지 말자.)

입력값들을 제대로 받아왔는지 체크도 한 번 해보자.
물론, 그냥 다음 단계로 넘어갈 수도 있지만
결과값이 원하는 대로 나오지 않았을 때
입력값들을 제대로 받아오지 않아서 처음부터 꼬여버리는 때가 있곤 하다.

입력받은 것을 출력하기만 하면되니,
한 번 체크해보는 것도 나쁘지 않은 것 같다.

for (int i = 0; i < 4; i++)
	printf("%d", selected_arr[i]);
for (int i = 0; i < 5; i++)
	pritnf("%d", arr[i]);

이제 비교하는 과정만 남았다.
각각의 입력값을 받았던 selected_arr 와, arr
반복문을 돌면서 그 값들을 비교를 하는데,
만약 중복되는 것이 있다면
조건문으로 처리를 해주면 된다.

위에서 언급했듯이,
두 값이 같은 경우에는 변수 counts-1 씩 연산해주면 된다.

for (int i = 0; i < 4; i++)
{
	for (int j = 0; j < 5; j++)
    {
    	if (selected_arr[i] == arr[j])
        	counts--;
     }
}

마지막으로, 변수 counts의 값을 출력해고,
그 값이 옳은지 확인해주면 된다.

printf("%d", counts);

Github_Repository

profile
🌱 iOS developer

0개의 댓글