From 023d6bd6c385f9b274f5fa38a05f416394ea7836 Mon Sep 17 00:00:00 2001 From: SEON MI KIM Date: Tue, 17 Sep 2024 00:22:32 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20III]=20Title:=20=EB=88=88=EC=82=AC?= =?UTF-8?q?=EB=9E=8C,=20Time:=20148=20ms,=20Memory:=2056064=20KB=20-Baekjo?= =?UTF-8?q?onHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 36 ++++++++++++++++++ .../\353\210\210\354\202\254\353\236\214.py" | 38 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 "\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/README.md" create mode 100644 "\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/\353\210\210\354\202\254\353\236\214.py" diff --git "a/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/README.md" "b/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/README.md" new file mode 100644 index 0000000..3e44021 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/README.md" @@ -0,0 +1,36 @@ +# [Silver III] 눈사람 - 32201 + +[문제 링크](https://www.acmicpc.net/problem/32201) + +### 성능 요약 + +메모리: 56064 KB, 시간: 148 ms + +### 분류 + +자료 구조, 해시를 사용한 집합과 맵, 정렬 + +### 제출 일자 + +2024년 9월 17일 00:22:20 + +### 문제 설명 + +

평창 동계 올림픽의 하이라이트를 장식할 눈사람 만들기 경기가 시작되었다! 이 경기에서는 주어진 시간동안 눈사람을 크게 만드는 사람이 우승한다.

+ +

애리가 중계 방송을 켰을 때, 경기가 시작한지 얼마 되지 않은 시점이었다. 중계 방송에서는 순위표를 방송하고 있었다. 순위표는 등수 순서대로 각 선수의 등번호를 나열한 표이다. 애리는 순위표에 나온 등번호를 순서대로 기억해 두었다.

+ +

애리가 잠시 딴짓을 하고 오자, 경기가 끝났다. 경기가 끝난 시점의 순위표가 주어젔을 때, 애리가 기억하는 시점에서의 등수와 비교해 가장 등수가 많이 상승한 선수들의 등번호를 구하여라.

+ +### 입력 + +

첫째 줄에는 경기에 참가한 선수의 수 N이 주어진다.

+ +

둘째 줄에는 애리가 중계 방송을 켠 시점에서 각 선수의 등번호를 나타내는 N개의 정수 A1,,AN가 등수 순서대로 공백을 사이에 두고 주어진다.

+ +

셋째 줄에는 경기가 끝난 시점에서 각 선수의 등번호를 나타내는 N개의 정수 B1,,BN가 등수 순서대로 공백을 사이에 두고 주어진다.

+ +### 출력 + +

가장 순위가 많이 상승한 선수들의 등번호들을 경기가 끝난 시점의 등수 순서대로 공백을 사이에 두고 출력한다.

+ diff --git "a/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/\353\210\210\354\202\254\353\236\214.py" "b/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/\353\210\210\354\202\254\353\236\214.py" new file mode 100644 index 0000000..41b7ef7 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/32201.\342\200\205\353\210\210\354\202\254\353\236\214/\353\210\210\354\202\254\353\236\214.py" @@ -0,0 +1,38 @@ +""" +[시도2] +dict 만들어서 서치 시간 줄이기 O(1) + +[시도1] 시간초과 +- (시간초과 예상) N^2 = 10^10 +- 그렇다고 table을 만들기에는 10^9 배열 크기 만들어도 될까? +""" + +import sys +readline = lambda: sys.stdin.readline().strip() + +# 전처리 +N = int(readline()) +before_arr = list(map(int, readline().split())) +after_arr = list(map(int, readline().split())) +after_rank_dict = {} + +for rank in range(N): + a_member = after_arr[rank] + after_rank_dict[a_member] = rank + +max_level_up = 0 +people = [] + +for before_rank in range(N): + member = before_arr[before_rank] + after_rank = after_rank_dict[member] + + level_up = before_rank - after_rank + if level_up > max_level_up: + max_level_up = level_up + people = [member] + elif level_up == max_level_up: + people.append(member) + + +print(" ".join(list(map(str, people))))