본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 키보드 이벤트 : 17254번 - Python

728x90
반응형

https://www.acmicpc.net/problem/17254

 

17254번: 키보드 이벤트

첫째 줄에 연결된 키보드의 개수 N과, 키보드를 누르게 될 횟수 M이 주어진다. (1 ≤ N, M ≤ 1,000) 다음 M개의 줄에 정수 a, b와 문자 c가 주어진다. 이는 a번 키보드로, b초에 문자 c가 적힌 키를

www.acmicpc.net

 

 

 

문제의 접근 방법

 

"키보드가 눌린 시간 순서대로 출력 -> 번호가 작은 키보드부터 누른 키가 출력됨"

위 순서로 정렬하기

 

 

 

내가 막혔던 부분

 

출력된 시간 순서대로 정렬하는 것만 생각함 -> 출력된 시간이 같을 경우 번호가 작은 키보드 순으로 정렬하는 조건을 포함시키지 않았어서 오답

 

 

 

문제 풀이 방법

 

키보드 개수(n), 키보드를 누르게 될 횟수(m)를 입력받기 -> m개의 줄만큼 정수 a,b와 문자 c 입력받아 형변환 시켜주기 -> 미리 선언해 둔 빈 리스트 arr에 a,b,c값을 추가하기 -> lamda 함수를 사용해서 arr의 두 번째 인덱스인 눌린 시간을 기준으로 오름차순 정렬하고, 만약 이 값이 같다면 첫 번째 인덱스인 키보드 번호를 기준으로 오름차순 정렬 -> 출력 형식에 맞춰서 출력!

 

 

 

소스코드

n,m = map(int, input().split())

arr = []

for _ in range(m):
    a,b,c = input().split()
    a,b = int(a), int(b)
    c = str(c)
    arr.append([a,b,c])
    
arr.sort(key=lambda x: [x[1],x[0]])

[ print(arr[i][2], end='') for i in range(len(arr)) ]
728x90
반응형