오도원입니다.

건강과 행복을 위하여

컴퓨터공학/알고리즘

19년 9월 1주차 : 시공의 폭풍 속으로

오도원공육사 2020. 6. 17. 22:59
반응형

1. 문제 - 난이도 ★

시공의 폭풍은 5대5 대결게임이다. 당신의 팀원들이 선택한 4명의 영웅번호와 당신이 선택하고자 하는 5명의 영웅번호가 주어질 때, 이미 팀원이 선택한 영웅이 아닌 영웅의 수를 구하라.

 

2. 입력

첫줄에 팀원이 선택한 4명의 영웅 번호가 주어진다. 두번째 줄에는 당신이 선택하고자 하는 5명의 영웅번호가 주어진다.

 

3. 출력

당신이 선택하고자 하는 영웅들 중에서 팀원이 선택하지 않은 영웅의 수를 출력한다.

 

4. 알고리즘

선택하고자하는 영웅리스트를 돌면서 팀원 리스트에 없으면 카운트를 1증가시킨다.

 

본인은 파이썬의 filter() 함수를 사용했다.

x = list(map(int, input().split()))
y = list(map(int, input().split()))
n = list(filter(lambda k : k not in x, y))
print(len(n))

5. 문제 해설

#include<iostream>
using namespace std;
int chk[100], num, ans;
int main(){
	for(int i = 0; i<4; ++i){
		scanf("%d", &num);
		chk[num] = 1;
	}
	for(int i = 0; i<5; ++i){
		scanf("%d", &num);
		if(chk[num] == 0) ++ans;
	}
	cout << ans;
}

87명의 영웅이 존재하므로 해당 영웅이 우리팀에 있는지 체크하는 chk배열을 생성한다. 길이는 100이고, 해당 영웅이 존재하면 해당 영웅이 인덱스가 되고 그 값이 1이다. 그렇지 않으면 값은 0이다. 

 

예를 들어 우리팀 영웅이 1 3 4 7이라면 0 1 0 1 1 0 0 1 0 0 ... 0이 되는 것이다. 1번, 3번, 4번, 7번 인덱스의 값이 1인 것이다. 그리고 두 번째 for 반복문에서 본인이 선택한 영웅들의 값이 0이면 ans 카운트 변수를 +1한다.

 

그러면 ans에는 본인이 선택한 영웅 중 팀원이 선택하지 않은 영웅의 수가 저장된다.

 

반응형