알고리즘

[백준, 파이썬, 2890번] 카약

hminor 2024. 5. 28. 10:42

풀이

  • 문제를 해결하면서 좀 비효율적인데 이게 맞는것 같아서 그냥 적용해서 해결
  • 우선 입력 값이 많이 있기에 import sys로 input 을 재정의 하고
  • 이후 현재 카약의 위치를 찾아서 해당 카약 번호에 맞는 li의 인덱스에 넣어주기
  • 이후 결과인 result 배열에 2중 for문으로
  • 비교 대상 카약인 i와 비교할 대상 카약인 j를 비교하는데 
  • i와 j 즉 같은 카약이 아니며 비교할 대상 카약이 더 목표 지점에 가깝고 
  • 같은 거리 위치의 카약과 비교한 적이 없는 경우에만
  • 카운팅과 s에 넣어 연산하여 해결 

 

import sys
input = sys.stdin.readline

r,c = map(int,input().split())
li = [0]*(9)
for _ in range(r):
    kayak = input().strip('\n')
    for i in range(1,len(kayak)-1):
        if kayak[i] != ".": 
            li[int(kayak[i])-1] = i
            break

result = [0]*(9)

for i in range(9):
    cnt = 1
    s = set()
    for j in range(9):
        if i != j and li[i] < li[j] and li[j] not in s: 
            cnt += 1
            s.add(li[j])
    result[i] = cnt

[print(i) for i in result]