Baekjoon 19637. IF문 좀 대신 써줘
[파이썬(python) 풀이]
게임 개발자인 밀리는 전투력 시스템을 만들어, 캐릭터가 가진 전투력을 기준으로 칭호를 붙여주려고 한다.
[파이썬(python) 풀이]예를 들어, 전투력 10,000 이하의 캐릭터는 WEAK, 10,000 초과 그리고 100,000 이하의 캐릭터는 NORMAL, 100,000 초과 그리고 1,000,000 이하의 캐릭터는 STRONG 칭호를 붙여준다고 하자. 이를 IF문으로 작성한다면 아래와 같이 구현할 수 있다.
if power <= 10000
print WEAK
else if power <= 100000
print NORMAL
else if power <= 1000000
print STRONG
혼자서 게임을 개발하느라 매우 바쁜 밀리를 대신해서, 캐릭터의 전투력에 맞는 칭호를 출력하는 프로그램을 작성하자.
입력
첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105)
두 번째 줄부터 N개의 줄에 각 칭호의 이름을 나타내는 길이 1 이상, 11 이하의 영어 대문자로만 구성된 문자열과 해당 칭호의 전투력 상한값을 나타내는 109 이하의 음이 아닌 정수가 주어진다. 칭호는 전투력 상한값의 비내림차순으로 주어진다.
N + 2번째 줄부터 M개의 각 줄에는 캐릭터의 전투력을 나타내는 음이 아닌 정수가 주어진다. 해당하는 칭호가 없는 전투력은 입력으로 주어지지 않는다.
출력
M개의 줄에 걸쳐 캐릭터의 전투력에 맞는 칭호를 입력 순서대로 출력한다. 어떤 캐릭터의 전투력으로 출력할 수 있는 칭호가 여러 개인 경우 가장 먼저 입력된 칭호 하나만 출력한다.
입력 예시
3 8
WEAK 10000
NORMAL 100000
STRONG 1000000
0
9999
10000
10001
50000
100000
500000
1000000
출력 예시
WEAK
WEAK
WEAK
NORMAL
NORMAL
NORMAL
STRONG
STRONG
❧ 정답
🔎IDEA) 이분탐색을 통한 칭호 설정 시 범위를 유의해야한다.
[Line 6 - 10]
👉 attack
에 ('칭호', '전투력')의 형태로 입력값을 추가한다.
👉 이분탐색을 하기 위해 attack
을 정렬한다.
[Line 11 - 15]
👉 만약 전투력은 같지만 칭호는 다른 게 여러 개일 경우 하나만 남기기위해 따로 _attack
리스트에 원소를 새롭게 저장해준다.
[Line 21 - 31]
👉 이분 탐색을 진행하는데, 칭호 선정은 하나의 전투력 이하로 책정한다.
'📊 Algorithm > Algorithm PS' 카테고리의 다른 글
[알고리즘 일기 - 파이썬] 182. 고정점 찾기 (0) | 2022.02.22 |
---|---|
[알고리즘 일기 - 파이썬] 181. 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2022.02.22 |
[알고리즘 일기 - 파이썬] 179. 파일 정리 (0) | 2022.02.11 |
[알고리즘 일기 - 파이썬] 178. 블로그 (0) | 2022.02.11 |
[알고리즘 일기 - 파이썬] 177. 두 용액 (0) | 2022.02.11 |