-
[Python] ๋ฐฑ์ค 15787 ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ (๊ตฌํ)๐ป Algorithm/Python 2022. 7. 8. 19:23
๐ ๋ฌธ์
N๊ฐ์ ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ ๊ฑด๋๋ ค๊ณ ํ๋ค.
๊ธฐ์ฐจ๋ 20๊ฐ์ ์ผ๋ ฌ๋ก ๋ ์ข์์ด ์๊ณ , ํ ๊ฐ์ ์ข์์๋ ํ ๋ช ์ ์ฌ๋์ด ํ ์ ์๋ค.
๊ธฐ์ฐจ์ ๋ฒํธ๋ฅผ 1๋ฒ๋ถํฐ N๋ฒ์ผ๋ก ๋งค๊ธธ ๋, ์ด๋ ํ ๊ธฐ์ฐจ์ ๋ํ์ฌ M๊ฐ์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋ค.
๋ช ๋ น์ ์ข ๋ฅ๋ 4๊ฐ์ง๋ก ๋ค์๊ณผ ๊ฐ๋ค.
1 i x : i๋ฒ์งธ ๊ธฐ์ฐจ์(1 ≤ i ≤ N) x๋ฒ์งธ ์ข์์(1 ≤ x ≤ 20) ์ฌ๋์ ํ์๋ผ. ์ด๋ฏธ ์ฌ๋์ด ํ์๋ค๋ฉด , ์๋ฌด๋ฐ ํ๋์ ํ์ง ์๋๋ค.
2 i x : i๋ฒ์งธ ๊ธฐ์ฐจ์ x๋ฒ์งธ ์ข์์ ์์ ์ฌ๋์ ํ์ฐจํ๋ค. ๋ง์ฝ ์๋ฌด๋ ๊ทธ์๋ฆฌ์ ์์์์ง ์์๋ค๋ฉด, ์๋ฌด๋ฐ ํ๋์ ํ์ง ์๋๋ค.
3 i : i๋ฒ์งธ ๊ธฐ์ฐจ์ ์์์๋ ์น๊ฐ๋ค์ด ๋ชจ๋ ํ์นธ์ฉ ๋ค๋ก๊ฐ๋ค. k๋ฒ์งธ ์์ ์ฌ๋์ k+1๋ฒ์งธ๋ก ์ด๋ํ์ฌ ์๋๋ค. ๋ง์ฝ 20๋ฒ์งธ ์๋ฆฌ์ ์ฌ๋์ด ์์์์๋ค๋ฉด ๊ทธ ์ฌ๋์ ์ด ๋ช ๋ น ํ์ ํ์ฐจํ๋ค.
4 i : i๋ฒ์งธ ๊ธฐ์ฐจ์ ์์์๋ ์น๊ฐ๋ค์ด ๋ชจ๋ ํ์นธ์ฉ ์์ผ๋ก๊ฐ๋ค. k๋ฒ์งธ ์์ ์ฌ๋์ k-1 ๋ฒ์งธ ์๋ฆฌ๋ก ์ด๋ํ์ฌ ์๋๋ค. ๋ง์ฝ 1๋ฒ์งธ ์๋ฆฌ์ ์ฌ๋์ด ์์์์๋ค๋ฉด ๊ทธ ์ฌ๋์ ์ด ๋ช ๋ น ํ์ ํ์ฐจํ๋ค.
M๋ฒ์ ๋ช ๋ น ํ์ 1๋ฒ์งธ ๊ธฐ์ฐจ๋ถํฐ ์์๋๋ก ํ ๊ธฐ์ฐจ์ฉ ์ํ์๋ฅผ ๊ฑด๋๋๋ฐ ์กฐ๊ฑด์ด ์๋ค.๊ธฐ์ฐจ๋ ์์๋๋ก ์ง๋๊ฐ๋ฉฐ ๊ธฐ์ฐจ๊ฐ ์ง๋๊ฐ ๋ ์น๊ฐ์ด ์์ ์ํ๋ฅผ ๋ชฉ๋ก์ ๊ธฐ๋กํ๋ฉฐ ์ด๋ฏธ ๋ชฉ๋ก์ ์กด์ฌํ๋ ๊ธฐ๋ก์ด๋ผ๋ฉด ํด๋น ๊ธฐ์ฐจ๋ ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด, ๋ค์ ๊ทธ๋ฆผ์ ์๋ก ๋ค์์ ๋, 1๋ฒ์งธ ๊ธฐ์ฐจ์ ๊ฐ์ด ์น๊ฐ์ด ์์ ์ํ๋ ๊ธฐ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ํ์๋ฅผ ๊ฑด๋ ์์๋ค. 2๋ฒ์งธ ๊ธฐ์ฐจ์ ๊ฐ์ ์ํ๋ ๊ธฐ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ 2๋ฒ์งธ ๊ธฐ์ฐจ๋ ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค. 3๋ฒ์งธ ๊ธฐ์ฐจ๋ 1๋ฒ์งธ ๊ธฐ์ฐจ์ ์น๊ฐ์ด ์์ ์ํ๊ฐ ๊ฐ์ผ๋ฏ๋ก ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค.
์ฒ์์ ์ฃผ์ด์ง๋ ๊ธฐ์ฐจ์๋ ์๋ฌด๋ ์ฌ๋์ด ํ์ง ์๋๋ค.
์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ ๊ธฐ์ฐจ์ ์๋ฅผ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ์งธ ์ค์ ๊ธฐ์ฐจ์ ์ N(1 ≤ N ≤ 100000)๊ณผ ๋ช ๋ น์ ์ M(1 ≤ M ≤ 100000)๊ฐ ์ฃผ์ด์ง๋ค. ์ดํ ๋ ๋ฒ์งธ ์ค๋ถํฐ M+1๋ฒ์งธ ์ค๊น์ง ๊ฐ ์ค์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ ๊ธฐ์ฐจ์ ์๋ฅผ ์ถ๋ ฅํ์์ค.
์์ ์ ๋ ฅ 1
5 5
1 1 1
1 1 2
1 2 2
1 2 3
3 1์์ ์ถ๋ ฅ 1
2
๐ ํ์ด
๐ฌ Code
import sys input = sys.stdin.readline n, m = map(int, input().split()) train = [[0 for _ in range(20)] for _ in range(n)] state = [] for _ in range(m): a = list(map(int, input().split())) if a[0] == 1: train[a[1] - 1][a[2] - 1] = 1 elif a[0] == 2: train[a[1] - 1][a[2] - 1] = 0 elif a[0] == 3: for j in range(19, 0, -1): train[a[1] - 1][j] = train[a[1] - 1][j - 1] train[a[1] - 1][0] = 0 elif a[0] == 4: for j in range(19): train[a[1] - 1][j] = train[a[1] - 1][j + 1] train[a[1] - 1][19] = 0 cnt = 0 for i in range(n): if train[i] not in state: state.append(train[i]) cnt += 1 print(cnt)
๐ก Solution
1. ๊ธฐ์ฐจ ๊ฐ๊ฐ์ ์์ 20๊ฐ๋ฅผ ๊ฐ์ง ๋ฆฌ์คํธ๋ก ์์ฑ, 20๊ฐ๋ฅผ ์ ๋ถ 0์ผ๋ก ์ด๊ธฐํํด์ค๋๋ค. (์๋ฌด๋ ์ ํ ์ํ)
2. ๋ช ๋ น์ด 1์ด๋ฉด x๋ฒ์งธ ์ข์์ ๊ฐ๋ง 1๋ก ๋ฐ๊ฟ์ค๋๋ค. (์๋ x๋ฒ์งธ ์ข์์ ์ฌ๋์ด ํ๊ณ ์๋ ์ ํ๊ณ ์๋ ์ด์ฐจํผ ์ข์ ๊ฐ์ 1์ด์ด์ผ ํ๋ฏ๋ก ์ฐฉ์ ์ฌ๋ถ ํ๋ณ ํ์ X), ๋ช ๋ น 2, 3, 4๋ ๊ฐ์ ์ด์ ๋ก ์ฐฉ์ ์ฌ๋ถ ํ๋ณ ํ์ X
3. ์ํ์๋ฅผ ํต๊ณผํ ๊ธฐ์ฐจ์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ state๋ฅผ ๋ง๋ค๊ณ , for๋ฌธ์ ๊ธฐ์ฐจ ์๋งํผ ๋๋ ค์ i๋ฒ์งธ ๊ธฐ์ฐจ์ ์ํ๊ฐ state์ ์๋ค๋ฉด state์ ์ฝ์ ํ๊ณ cnt += 1
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 19637 IF๋ฌธ ์ข ๋์ ์จ์ค (Binary Search) (0) 2022.07.08 [Python] ๋ฐฑ์ค 16953 A โ B (Greedy/BFS) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11286 ์ ๋๊ฐ ํ (Heapq) (0) 2022.07.08 [Python] ๋ฐฑ์ค 3184 ์ (BFS) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (BFS) (0) 2022.07.02