๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 11728๋ฒˆ : ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ (Python/Two-Pointer/Silver 5)

devCloud 2023. 11. 9. 20:43
728x90
 

11728๋ฒˆ: ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฐฐ์—ด A์˜ ํฌ๊ธฐ N, ๋ฐฐ์—ด B์˜ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 1,000,000) ๋‘˜์งธ ์ค„์—๋Š” ๋ฐฐ์—ด A์˜ ๋‚ด์šฉ์ด, ์…‹์งธ ์ค„์—๋Š” ๋ฐฐ์—ด B์˜ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” ์ ˆ๋Œ“๊ฐ’์ด 109๋ณด๋‹ค ์ž‘๊ฑฐ

www.acmicpc.net


์„ค๋ช…

์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๋‘ ๋ฐฐ์—ด A, B๋ฅผ ํ•ฉ์นœ ํ›„ ์ •๋ ฌํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.
์ฒซ์งธ ์ค„์—๋Š” ๋ฐฐ์—ด A, B์˜ ํฌ๊ธฐ N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1๋ถ€ํ„ฐ)
๋‘˜์งธ ์ค„์—๋Š” ๋ฐฐ์—ด A์˜ ๋‚ด์šฉ์ด, ์…‹์งธ ์ค„์—๋Š” ๋ฐฐ์—ด B์˜ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค.

 

ํ’€์ด

• ๋ฐฉ๋ฒ• 1 - sort()

  1. ๋ฌธ์žํ˜•์œผ๋กœ ์ž…๋ ฅ๋ฐ›๊ณ  ํ•œ ๋ฆฌ์ŠคํŠธ์— A, B๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.
  2. ๋ฆฌ์ŠคํŠธ ๋‚ด์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  3. sort()๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์—์„œ ๊บผ๋‚ด ์ถœ๋ ฅํ•œ๋‹ค.

• ๋ฐฉ๋ฒ• 2 - two pointer algorithm

  • ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฆฌ์ŠคํŠธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ ๋‘ ๊ฐœ์˜ ์ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜๋ฏธํ•œ๋‹ค

 

Solution

ํ’€์ด 1. ์ •๋ ฌ ์‚ฌ์šฉ

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
num = []
for _ in range(2):
    num += input().split() #['3', '5', '2', '9']
ans = []
for i in num:
    ans.append(int(i))
ans.sort() #๋ฌธ์žํ˜•์ด๋ผ๋„ ์ •๋ ฌ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ ๋จ ์ฆ‰, 100๊ณผ 11์ผ ๋•Œ ์ถœ๋ ฅ์ด 100 11์ž„. ์ •๋‹ต์€ 11 100
print(*ans)

 

ํ’€์ด 2. ํˆฌ ํฌ์ธํ„ฐ ์‚ฌ์šฉ

import sys
input = sys.stdin.readline

n, m = map(int, input().rsplit())

a = list(map(int, input().rsplit())) 
b = list(map(int, input().rsplit()))

left, right = 0, 0
ans = []
while left < n and right < m:
    if a[left] < b[right]:
        ans.append(a[left]) 
        left += 1
    else:
        ans.append(b[right])
        right += 1
#์œ„์˜ while๋ฌธ์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ๋ชปํ•œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ
while left < n:
    ans.append(a[left])
    left += 1
    
while right < m:
    ans.append(b[right])
    right += 1
    
print(' '.join(map(str, ans)))

 

TIL

rsplit() : ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ์ง€์ • ๊ตฌ๋ถ„์ž(๊ธฐ๋ณธ๊ฐ’ : ๊ณต๋ฐฑ) ๊ธฐ์ค€์œผ๋กœ ์ž˜๋ผ์„œ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

 


 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

1์ฐจ ์ œ์ถœ์— ์‹คํŒจํ–ˆ์—ˆ๋Š”๋ฐ ์ด์œ ๋Š”, ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ค์ง€ ์•Š๊ณ  ์ •๋ ฌ์„ ์‹œ์ผฐ๋Š”๋ฐ ์ž˜ ๋˜๊ธธ๋ž˜ ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋ก€๊ฐ€ 'A = 100, B = 11'์ผ ๋•Œ ๋‹ต์€ '11 100'์ธ๋ฐ ๋‚ด ์ถœ๋ ฅ์€ '100 11' ์ด์—ˆ๋‹ค. ์ •์ˆ˜๋ผ๋„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ์‹œ์ผฐ๋‹ค.

 

2๊ฐ€์ง€ ํ’€์ด๊ฐ€ ์žˆ๋Š”๋ฐ ํˆฌ ํฌ์ธํ„ฐ๋กœ๋Š” ์ฒ˜์Œ ํ’€์–ด๋ด์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. ์ด๋ถ„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž‘ ๋น„์Šทํ•ด๋ณด์—ฌ์„œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ์ •๋ ฌ๊ณผ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋น„๊ตํ–ˆ์„ ๋•Œ ํˆฌ ํฌ์ธํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ์ฐจ์ง€ํ•˜์ง€๋งŒ, ์†๋„๋Š” ์กฐ๊ธˆ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ •๋ ฌ์„ ์“ฐ๋Š” ๊ฒŒ ๋” ๊น”๋”ํ•ด ๋ณด์ด๊ธด ํ•œ๋‹ค. 

 

ํˆฌ ํฌ์ธํ„ฐ : ๋ฉ”๋ชจ๋ฆฌ 304392KB, ์†๋„ 1736 ms

์ •๋ ฌ :  ๋ฉ”๋ชจ๋ฆฌ 295080, ์†๋„ 1760 ms

728x90