210527 [백준] 대표자연수(2548) / 한 줄로 서기(1138) / 좌표 압축(18870)

대표자연수(2548)

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

 

import sys

N=int(input())

nums=list(map(int,sys.stdin.readline().split()))
nums.sort()

print(nums[N//2-1]) if N%2==0 else print(nums[N//2])

 

#-_-..

#차이가 가장 적은.. => 중앙값

#중앙값인건 ㅇㅇ 진즉 알았는데 보통 중앙값은 개수가 짝수일땐 중간 두개 값의 평균인데 여기는 리슽트 안에서 대표를 뽑는거니 걍 중간 두개값 중 먼저 나오는 값이 중앙값 ㅇㅅㅇ

#문제를 잘못 이해해서 몇번을 틀렸는지 원.. 결국 구글링으로 도움을 받았다고 한다 쩝쩝..


한 줄로 서기(1138)

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

 

N=int(input())
people=list(map(int,input().split()))
line=list(i for i in range(N))
final={}

for i,p in enumerate(people):
    final[line[p]]=i+1
    del line[p]

for p in sorted(final.items()):
    print(p[1],end=' ')

 

#입력으로 주어진 리스트를 차례로 돈다. 해당 인덱스 값은 남은 여석 내에 순서를 의미한다. 차례차례로 좌석을 채워주면 됐던 문제.

#채워진 자리를 어떻게 배제하는게 효율적일까 고민을 많이 했던 문제

#내 방법) 자리표 리스트를 만들어서 채워진 자리는 그 리스트에서 빼버린 식으로 했다.

#다른 방법) for문을 돌면서 채워진 자리라면 카운트 안하고 넘어가는 식으로 해서 자리 찾는 방법 >>시간이 많이 걸릴 줄 알고 처다도(?) 안봤는데 의외로 시간이 적게 걸리는거 같음


좌표 압축(18870)

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

 

N=int(input())
spot=list(map(int,input().split()))
count={}

for i,s in enumerate(sorted(set(spot))):
    count[s]=i

for s in spot:
    print(count[s],end=' ')

 

#set도 sorted 할 수 있다.