티스토리 뷰

var n,i:word;a,d:array[0..999]of word;
begin
read(n);
for i:=0 to 999 do d[i]:=0; 
for i:=1 to n do begin read(a[i]);d[a[i]]+=1;end;
for i:=1 to 999 do d[i]+=d[i-1];
for i:=1 to n do writeln(1+d[a[i]-1]);
end.

 

먼저 들어온대로 순서를 매기는 문제입니다.

단 동시에 들어온 경우 (ex 1등 2명, 2등 1명)

2등은 존재하지 않으며 3등이 됩니다.

 

풀이

1. 배열 a는 입력받은 수를 순서대로 저장, 배열 d는 1~1000 수가 얼마나 입력됬는지를 저장

2. d[i] += d[i-1] 을 반복합니다 (누적합), 이것을 해야 자신 앞에 얼마나 많이 있는지 확인이 가능합니다.

ex) 1 1 1 2 3 3 3,   2의 입장에서 자신보다 앞에 있는 사람이 d[2-1] = 3 이므로 자신은 4등입니다. 마찬가지로 3의 입장에서 자신보다 앞에 있는 사람이 d[3-1] = 4 이므로 자신은 5등입니다.

3. 입력받은 수 순서대로 d[a[i]-1]+1 을 출력합니다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함