BOJ/๐Ÿฅ‡

โ˜…Coordinate Compression Advanced - 2 Solvedโ˜…

metamong 2023. 12. 28.

โ˜… 18869 ๋ฉ€ํ‹ฐ๋ฒ„์Šค II โ˜…

 

import sys
input=sys.stdin.readline
from collections import defaultdict

M,N=map(int,input().split())
cu_list,ans=[],0
def get_compressed_coordinate(l):
    sort_l = sorted(set(l))
    cd = {sort_l[i]: i for i in range(len(sort_l))}
    x = [cd[n] for n in l]
    return x

for _ in range(M):
    universe=list(map(int,input().split()))
    compressed_universe = get_compressed_coordinate(universe)
    cu_list.append(tuple(compressed_universe))

freq=defaultdict(int)

for cu in cu_list:
    freq[cu] += 1

for val in freq.values():
    if val > 1:
        ans+=(((val)*(val-1))//2)
print(ans)

 

๐ŸŒŽ ๊ท ๋“ฑํ•œ์ง€ ์•„๋‹Œ์ง€์˜ ๊ธฐ์ค€์€ ๋Œ€์†Œ๊ด€๊ณ„๋กœ๋งŒ ํŒ๋ณ„ํ•˜๋ฏ€๋กœ ํฌ๊ธฐ ์ž์ฒด์— ์˜๋ฏธ์—†๊ณ  ํฌ๊ธฐ ์‚ฌ์ด์˜ ๋Œ€์†Œ๊ด€๊ณ„๋งŒ ์œ ์˜๋ฏธํ•˜๊ธฐ์— Coordinate Compression ์ง„ํ–‰

 

๐ŸŒŽ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ ์šฐ์ฃผ๋ฅผ ์ขŒํ‘œ ์••์ถ•(get_compressed_coordinate)์„ ์ง„ํ–‰ํ•ด์„œ ๊ฐ ์šฐ์ฃผ์— ์กด์žฌํ•˜๋Š”, ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ํ–‰์„ฑ์˜ index ์ €์žฅ

ex) 1 3 2๋ผ๋ฉด ๊ฐ ํ–‰์„ฑ์˜ ์ขŒํ‘œ ์••์ถ• ๊ฒฐ๊ณผ index๋Š” 0 2 1 / 12 50 31์ด๋ผ๋ฉด ์ขŒํ‘œ ์••์ถ• ๊ฒฐ๊ณผ index๋Š” 0 2 1

 

๐ŸŒŽ ์ขŒํ‘œ ์••์ถ• ๊ฒฐ๊ณผ index๋ฅผ tuple ํ˜•ํƒœ๋กœ cu_list์— ๋„ฃ์Œ → ๋นˆ๋„์ˆ˜ dictionary ์ €์žฅ → ๋นˆ๋„์ˆ˜ 2 ์ด์ƒ์ผ ๊ฒฝ์šฐ๋งŒ ์Œ์˜ ๊ฐœ์ˆ˜ ๋ˆ„์  ํ•ฉ ์ถœ๋ ฅ


โ˜… 20440 ๐ŸŽต ๋‹ˆ๊ฐ€ ์‹ซ์–ด ์‹ซ์–ด ๋„ˆ๋ฌด ์‹ซ์–ด ์˜ค์ง€ ๋งˆ ๋‚ด๊ฒŒ ์ฐ์ฉ๋Œ€์ง€๋งˆ๐ŸŽต - 1 โ˜…

 

import sys
input=sys.stdin.readline
from collections import defaultdict

N=int(input())
delta_mosquito=defaultdict(int)

for _ in range(N):
    e,x=map(int,input().split())
    delta_mosquito[e] += 1
    delta_mosquito[x] -= 1

time=sorted(delta_mosquito.keys())

cumsum=[]
total=0
for i in range(len(time)):
    total+=delta_mosquito[time[i]]
    cumsum.append(total)
many=max(cumsum)
found=False
for x in range(len(cumsum)):
    if cumsum[x] == many:
        if not found:
            found=True
            s,e=x,x+1
        else:
            e+=1
    else:
        if found:
            break
print(many)
print(time[s],time[e])

 

๐ŸŒŽ BOJ 9574 <Goldilocks and the N Cows>์™€ ๋น„์Šทํ•œ ์ขŒํ‘œ ์••์ถ• ๋ฌธ์ œ

 

๐ŸŒŽ ๋ชจ๊ธฐ์˜ ์ž…์žฅ / ํ‡ด์žฅ ์‹œ๊ฐ„ ์ˆซ์ž ์ž์ฒด๋Š” ์ค‘์š”์น˜ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๋ชจ๊ธฐ์˜ ์ž…์žฅ / ํ‡ด์žฅ ์‹œ๊ฐ„ ๊ฐ„์˜ ๋Œ€์†Œ ๋น„๊ต๋งŒ ์ค‘์š”ํ•˜๋ฏ€๋กœ Coordinate Compression ์œ ํ˜•

 

โ˜… ํ•ต์‹ฌ์€ ๋ชจ๊ธฐ์˜ ์ž…์žฅ / ํ‡ด์žฅ ์‹œ๊ฐ„ ์ˆ˜ ๋ฒ”์œ„๊ฐ€ 2์–ต์ด ๋„˜์–ด๊ฐ„๋‹ค๋Š” ์  → ๋ชจ๊ธฐ์˜ ๋งˆ๋ฆฟ์ˆ˜ N์„ ํ™œ์šฉ โ˜…

 

๐ŸŒŽ

โ‘  hash map ์ƒ์„ฑ: ๋ชจ๊ธฐ์˜ ์ž…์žฅ/ํ‡ด์žฅ์‹œ๊ฐ„์„ key, ํ•ด๋‹น ์‹œ๊ฐ„์— ์ž…์žฅ + 1 / ํ‡ด์žฅ - 1์„ ํ™œ์šฉํ•œ ๋ชจ๊ธฐ ๋งˆ๋ฆฟ์ˆ˜ ๋ณ€ํ™”๋Ÿ‰์„ value

โ‘ก hash map์˜ keys() ๊ฐ€์ ธ์™€์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

(์ž…์žฅ/ํ‡ด์žฅ ์‹œ๊ฐ„ ์ˆซ์ž ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๋ณ€ํ™”๋Ÿ‰๋งŒ ๋”ฐ์ง€๋ฏ€๋กœ Coordinate Compression ๊ธฐ๋ฒ• ์ง„ํ–‰)

โ‘ข ์ •๋ ฌํ•œ keys() for loop ๋Œ๋ฆฌ๋ฉฐ ๋งˆ๋ฆฟ์ˆ˜ ๋ณ€ํ™”๋Ÿ‰ ๋ˆ„์ ํ•ฉ list ์ƒ์„ฑ → ๋ˆ„์ ํ•ฉ ๊ฒฐ๊ณผ๋Š” ๋งค ์‹œ๊ฐ„ ๋ชจ๊ธฐ์˜ ๋งˆ๋ฆฟ์ˆ˜

โ‘ฃ ์ฆ‰ ๋ˆ„์ ํ•ฉ list์˜ ์ตœ๋Œ“๊ฐ’ & ์ตœ๋Œ“๊ฐ’์ผ ๋•Œ์˜ start index / end index ๊ตฌํ•ด์„œ ์ถœ๋ ฅ

๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ ๊ธฐ์ค€ ์ถœ๋ ฅ์ด๋ฏ€๋กœ flag ๊ฐ’ ํ™œ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ ์ฐพ์€ ๋’ค ์—ฐ์†ํ•ด์„œ ์ตœ๋Œ“๊ฐ’์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋งŒ ์ œ์™ธ ๋ฐ”๋กœ break


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'BOJ > ๐Ÿฅ‡' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โ˜…DP Upper-Advanced I - 8 Solvedโ˜…  (1) 2024.01.05
โ˜…Binary Search Advanced I - 2 Solvedโ˜…  (0) 2023.12.29
โ˜…Tree Advanced I - 1 Solvedโ˜…  (1) 2023.12.22
โ˜…BFS&DFS Advanced I - 10 Solvedโ˜…  (0) 2023.12.15
โ˜…Greedy Upper-Advanced I - 1 Solvedโ˜…  (1) 2023.10.18

๋Œ“๊ธ€