728x90
๋ฐ์ํ
๋ฌธ์ ์ค๋ช
์ํธ๊ฐ ๊ด๋ฆฌํ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ํ
์ด๋ธ์ ๋ชจ๋ ์ ์ ํ์
์ธ ์ปฌ๋ผ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ํ
์ด๋ธ์ 2์ฐจ์ ํ๋ ฌ๋ก ํํํ ์ ์์ผ๋ฉฐ ์ด์ ์ปฌ๋ผ์ ๋ํ๋ด๊ณ , ํ์ ํํ์ ๋ํ๋
๋๋ค.
์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ๊ธฐ๋ณธํค๋ก์ ๋ชจ๋ ํํ์ ๋ํด ๊ทธ ๊ฐ์ด ์ค๋ณต๋์ง ์๋๋ก ๋ณด์ฅ๋ฉ๋๋ค. ์ํธ๋ ์ด ํ
์ด๋ธ์ ๋ํ ํด์ ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ์์ต๋๋ค.
- ํด์ ํจ์๋ col, row_begin, row_end์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
- ํ ์ด๋ธ์ ํํ์ col๋ฒ์งธ ์ปฌ๋ผ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๋, ๋ง์ฝ ๊ทธ ๊ฐ์ด ๋์ผํ๋ฉด ๊ธฐ๋ณธํค์ธ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํฉ๋๋ค.
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ์์ S_i๋ฅผ i ๋ฒ์งธ ํ์ ํํ์ ๋ํด ๊ฐ ์ปฌ๋ผ์ ๊ฐ์ i ๋ก ๋๋ ๋๋จธ์ง๋ค์ ํฉ์ผ๋ก ์ ์ํฉ๋๋ค.
- row_begin ≤ i ≤ row_end ์ธ ๋ชจ๋ S_i๋ฅผ ๋์ ํ์ฌ bitwise XOR ํ ๊ฐ์ ํด์ ๊ฐ์ผ๋ก์ ๋ฐํํฉ๋๋ค.
ํ ์ด๋ธ์ ๋ฐ์ดํฐ data์ ํด์ ํจ์์ ๋ํ ์ ๋ ฅ col, row_begin, row_end์ด ์ฃผ์ด์ก์ ๋ ํ ์ด๋ธ์ ํด์ ๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ data์ ๊ธธ์ด ≤ 2,500
- 1 ≤ data์ ์์์ ๊ธธ์ด ≤ 500
- 1 ≤ data[i][j] ≤ 1,000,000
- data[i][j]๋ i + 1 ๋ฒ์งธ ํํ์ j + 1 ๋ฒ์งธ ์ปฌ๋ผ์ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
- 1 ≤ col ≤ data์ ์์์ ๊ธธ์ด
- 1 ≤ row_begin ≤ row_end ≤ data์ ๊ธธ์ด
์ ์ถ๋ ฅ ์
data | col | row_begin | row_end | result |
[[2,2,6],[1,5,10],[4,2,9],[3,8,3]] | 2 | 2 | 3 | 4 |
์ ์ถ๋ ฅ ์ ์ค๋ช
- ์ ํด์ง ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํํ์ ์ ๋ ฌํ๋ฉด {4, 2, 9}, {2, 2, 6}, {1, 5, 10}, {3, 8, 3} ์ด ๋ฉ๋๋ค.
- S_2 = (2 mod 2) + (2 mod 2) + (6 mod 2) = 0 ์ ๋๋ค.
- S_3 = (1 mod 3) + (5 mod 3) + (10 mod 3) = 4 ์ ๋๋ค.
- ๋ฐ๋ผ์ ํด์ ๊ฐ์ S_2 XOR S_ 3 = 4 ์ ๋๋ค.
ํ์ด
์ด ๋ฌธ์ ๋...
- ๊ทธ๋ฅ ์ง๋ฌธ๋๋ก ์ฝ๋ฉํด์ ํ๋ฉด ํ๋ฆฌ๋ ๋ฌธ์ ๋ค.
- ๋ญ๊ฐ ๋๋จํ ๊ฒ ์์ ์ค ์์๋๋ฐ...
def solution(data, col, row_begin, row_end):
sum_xor = 0
data.sort(key=lambda x:(x[col-1],-x[0]))
col_size = len(data[0])
for c in range(col_size):
sum_xor += data[row_begin-1][c] % row_begin
#print(data[row_begin-1], sum_xor)
for i in range(row_begin, row_end, 1):
sum_mod = 0
for c in range(col_size):
sum_mod += data[i][c] % (i+1)
sum_xor = sum_xor ^ sum_mod
#print(data[row_begin-1], sum_mod)
return sum_xor
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.02ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.06ms, 10.4MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.24ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.37ms, 12.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (33.16ms, 57.8MB)
ํ
์คํธ 7 ใ ํต๊ณผ (45.04ms, 64.5MB)
ํ
์คํธ 8 ใ ํต๊ณผ (57.18ms, 64.4MB)
ํ
์คํธ 9 ใ ํต๊ณผ (69.37ms, 64.5MB)
ํ
์คํธ 10 ใ ํต๊ณผ (80.05ms, 64.3MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.01ms, 10.3MB)
- ํน์๋ ํด์ ์ง์๊ฐ๋ฉด ์ด์ฐจํผ 0์ด๋๊น ์นด์ดํฐ๋ก ๋ชจ์์ ์ฒ๋ฆฌํด๋ณด์์ง๋ง ์๋ ์ฒดํฌ์์ ๋ณ ์ฐจ์ด์๊ฑฐ๋ ๋ ๋๋ ค์ง.
- ๊ทธ๋ฅ ๋ฌด์ง์ฑ ์ฝ๋ฉ์ด ์ ๋ต.
from collections import Counter
def solution(data, col, row_begin, row_end):
sum_xor = 0
data.sort(key=lambda x:(x[col-1],-x[0]))
mod_counter = Counter()
for i in range(row_begin-1, row_end):
row_mod = 0
for c in range(len(data[0])):
row_mod += data[i][c] % (i+1)
mod_counter[row_mod] += 1
for mod_val, count in mod_counter.items():
if count % 2 != 0:
sum_xor ^= mod_val
return sum_xor
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.03ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.07ms, 10.3MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.08ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.24ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.46ms, 12MB)
ํ
์คํธ 6 ใ ํต๊ณผ (36.10ms, 57.7MB)
ํ
์คํธ 7 ใ ํต๊ณผ (51.89ms, 64.5MB)
ํ
์คํธ 8 ใ ํต๊ณผ (73.27ms, 64.4MB)
ํ
์คํธ 9 ใ ํต๊ณผ (76.26ms, 64.6MB)
ํ
์คํธ 10 ใ ํต๊ณผ (76.45ms, 64.2MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.02ms, 10.1MB)
- ํ์ด์ฌ์ ์ฝ๋ ๋ผ์ธ ์๊ฐ ์ค์ด๋ค๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
- ์ ๊ทธ๋ด๊น?
from collections import Counter
def solution(data, col, row_begin, row_end):
sum_xor = 0
data.sort(key=lambda x:(x[col-1],-x[0]))
mod_counter = Counter()
for i in range(row_begin-1, row_end):
row_mod = 0
row_mod = sum(data[i][c] % (i+1) for c in range(len(data[0])))
mod_counter[row_mod] += 1
for mod_val, count in mod_counter.items():
if count % 2 != 0:
sum_xor ^= mod_val
return sum_xor
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.06ms, 10.2MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.04ms, 10.4MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.08ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.51ms, 10.4MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.43ms, 12.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (30.97ms, 57.8MB)
ํ
์คํธ 7 ใ ํต๊ณผ (46.71ms, 64.6MB)
ํ
์คํธ 8 ใ ํต๊ณผ (58.16ms, 64.5MB)
ํ
์คํธ 9 ใ ํต๊ณผ (69.12ms, 64.6MB)
ํ
์คํธ 10 ใ ํต๊ณผ (72.41ms, 64MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.01ms, 10.2MB)
- ๊ณ ์์ ์๊ณ ๋ฆฌ์ฆ. ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
from functools import reduce
def solution(data, col, row_begin, row_end):
data.sort(key = lambda x : (x[col-1], -x[0]))
return reduce(lambda x, y: x ^ y,
[sum(map(lambda x: x%(i+1), data[i])) for i in range(row_begin-1, row_end)])
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.03ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.04ms, 10.3MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.06ms, 10.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.22ms, 10.4MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.99ms, 12.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (30.25ms, 57.8MB)
ํ
์คํธ 7 ใ ํต๊ณผ (45.84ms, 64.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (57.02ms, 64.3MB)
ํ
์คํธ 9 ใ ํต๊ณผ (64.75ms, 64.5MB)
ํ
์คํธ 10 ใ ํต๊ณผ (72.42ms, 64.2MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.01ms, 10.2MB)
- reduce๊ฐ ๋ญ์ง?
- ์ฝ๋ฉ ๋์ฅ - ์ข๊ตฌ๋.
- https://dojang.io/mod/page/view.php?id=2360
- ๋ฌ๋ ์
- https://www.daleseo.com/python-functools-reduce/
- ํ์ด์ฌ์ functools ๋ด์ฅ ๋ชจ๋์ reduce() ํจ์๋ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ์ฃผ๋ก ๋์ ์ง๊ณ๋ฅผ ๋ด๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์๋ฐ์. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ธฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃจํ ๋๋ฉด์ ์ง๊ณ ํจ์๋ฅผ ๊ณ์ํด์ ์ ์ฉํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋์ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. reduce(์ง๊ณ ํจ์, ์ํ ๊ฐ๋ฅํ ๋ฐ์ดํฐ[, ์ด๊ธฐ๊ฐ]) ์ฌ๊ธฐ์, ์ง๊ณ ํจ์๋ ๋๊ฐ์ ์ธ์๋ฅผ ๋ฐ์์ผ ํ๋๋ฐ์. ์ฒซ๋ฒ์งธ ์ธ์๋ ๋์ ์(accumulator), ๋๋ฒ์งธ ์ธ์๋ ํ์ฌ๊ฐ(current value)๊ฐ ๋์ด์ค๊ฒ ๋ฉ๋๋ค. ๋์ ์๋ ํจ์ ์คํ์ ์์๋ถํฐ ๋๊น์ง ๊ณ์ํด์ ์ฌ์ฌ์ฉ๋๋ ๊ฐ์ด๊ณ , ํ์ฌ๊ฐ์ ๋ฃจํ ๋๋ฉด์ ๊ณ์ํด์ ๋ฐ๋๋ ๊ฐ์ ๋๋ค.
728x90
๋ฐ์ํ
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > Python ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์ฐ๋ฐ์์ด ์ ์ ๋ถ (0) | 2023.02.15 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์ซ์ ์นด๋ ๋๋๊ธฐ (0) | 2023.02.15 |
ํ๋ก๊ทธ๋๋จธ์ค ๋ํ์ค ๊ฒ์ (0) | 2023.02.15 |
ํ๋ก๊ทธ๋๋จธ์ค ์ ์ฐ๊ธฐ (0) | 2023.02.14 |
ํ๋ก๊ทธ๋๋จธ์ค ๋จ์ด ํผ์ฆ (0) | 2023.02.14 |