์ฝ”ํ…Œ์ค€๋น„

<ํˆฌ ํฌ์ธํ„ฐ> ๋ฐฑ์ค€ 1940๋ฒˆ. ์ฃผ๋ชฝ (์‹ค๋ฒ„ 4)

์š”๋Œœ๋‹ค 2023. 1. 15. 01:00

https://www.acmicpc.net/problem/1940

 

1940๋ฒˆ: ์ฃผ๋ชฝ

์ฒซ์งธ ์ค„์—๋Š” ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 15,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ๊ฐ‘์˜ท์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ์ˆ˜ M(1 ≤ M ≤ 10,000,000) ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์…‹์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์žฌ๋ฃŒ๋“ค์ด ๊ฐ€์ง„ ๊ณ 

www.acmicpc.net

์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ๊ณผ ํˆฌ ํฌ์ธํ„ฐ๋กœ ๋ถ„๋ฅ˜๋œ ๋ฌธ์ œ์ด๋‹ค..! 

์ด ๋ถ„๋ฅ˜๋ฅผ ๋ณด๊ณ  ํžŒํŠธ๋ฅผ ์–ป์–ด ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค.

 

# 1์ฐจ ์‹œ๋„ : ์‹œ๊ฐ„ ์ดˆ๊ณผ
n = int(input())
m = int(input())
lst = list(map(int, input().split()))
cnt = 0

for i in range(n):
  for j in range(i+1,n):
    print(i,j)
    if lst[i]+lst[j] == m:
      print(lst[i],lst[j])
      cnt += 1
  print()    

print(cnt)

์ฒ˜์Œ์—” ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  cnt๋ฅผ ๋Š˜๋ ค์ฃผ์—ˆ๋‹ค.

์ด์ค‘๋ฐ˜๋ณต๋ฌธ์ด ์‚ฌ์šฉ๋ผ O(N^2)์ด๊ณ , ๊ฒฐ๊ตญ ๋‹ต์€ ๋งž์•˜์œผ๋‚˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋œจ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜ ๊ทธ๋Œ€๋กœ ์ •๋ ฌ ํ›„ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์ฃผ์—ˆ๋‹ค

n = int(input())
m = int(input())
lst = list(map(int, input().split()))
cnt = 0
## 1 2 3 4 5 7
start, end = 0, n-1
lst.sort()
while start<end:
  if lst[start]+lst[end] == m:    
    cnt += 1
    start += 1
    end -= 1
  elif lst[start]+lst[end] < m :# ํ•ฉ์ด ๋” ์ž‘๋‹ค๋ฉด
    start += 1
  else :
    end -= 1
 

print(cnt)

์ด์ค‘๋ฐ˜๋ณต๋ฌธ์—์„œ ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

์š”์ฆ˜์€ ๋ฌธ์ œ๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•œ์ง€ ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์‹ ๊ฒฝ์“ฐ๊ณ  ์žˆ๋‹ค.