[πŸ™ μ•Œκ³ λ¦¬μ¦˜] λ°±μ€€ 1940 - μ£Όλͺ½ / Python

dsfasdΒ·2022λ…„ 10μ›” 24일
0

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


문제

μ£Όλͺ½μ€ 철기ꡰ을 μ–‘μ„±ν•˜κΈ° μœ„ν•œ ν”„λ‘œμ νŠΈμ— λ‚˜μ„°λ‹€. κ·Έλž˜μ„œ μ•Όμ² λŒ€μž₯을 톡해 철기ꡰ이 μž…μ„ κ°‘μ˜·μ„ λ§Œλ“€κ²Œ ν•˜μ˜€λ‹€. μ•Όμ² λŒ€μž₯은 μ£Όλͺ½μ˜ λͺ…에 λ”°λ₯΄κΈ° μœ„ν•˜μ—¬ 연ꡬ에 μ°©μˆ˜ν•˜λ˜ 쀑 μ•„λž˜μ™€ 같은 사싀을 λ°œκ²¬ν•˜κ²Œ λ˜μ—ˆλ‹€.

κ°‘μ˜·μ„ λ§Œλ“œλŠ” μž¬λ£Œλ“€μ€ 각각 κ³ μœ ν•œ 번호λ₯Ό 가지고 μžˆλ‹€. κ°‘μ˜·μ€ 두 개의 재료둜 λ§Œλ“œλŠ”λ° 두 재료의 κ³ μœ ν•œ 번호λ₯Ό ν•©μ³μ„œ M(1 ≀ M ≀ 10,000,000)이 되면 κ°‘μ˜·μ΄ λ§Œλ“€μ–΄ μ§€κ²Œ λœλ‹€. μ•Όμ² λŒ€μž₯은 μžμ‹ μ΄ λ§Œλ“€κ³  μžˆλŠ” 재료λ₯Ό 가지고 κ°‘μ˜·μ„ λͺ‡ κ°œλ‚˜ λ§Œλ“€ 수 μžˆλŠ”μ§€ κΆκΈˆν•΄μ‘Œλ‹€. μ΄λŸ¬ν•œ κΆκΈˆμ¦μ„ ν’€μ–΄ μ£ΌκΈ° μœ„ν•˜μ—¬ N(1 ≀ N ≀ 15,000) 개의 μž¬λ£Œμ™€ M이 μ£Όμ–΄μ‘Œμ„ λ•Œ λͺ‡ 개의 κ°‘μ˜·μ„ λ§Œλ“€ 수 μžˆλŠ”μ§€λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 μ€„μ—λŠ” 재료의 개수 N(1 ≀ N ≀ 15,000)이 주어진닀. 그리고 두 번째 μ€„μ—λŠ” κ°‘μ˜·μ„ λ§Œλ“œλŠ”λ° ν•„μš”ν•œ 수 M(1 ≀ M ≀ 10,000,000) 주어진닀. 그리고 λ§ˆμ§€λ§‰μœΌλ‘œ μ…‹μ§Έ μ€„μ—λŠ” N개의 μž¬λ£Œλ“€μ΄ 가진 κ³ μœ ν•œ λ²ˆν˜Έλ“€μ΄ 곡백을 사이에 두고 주어진닀. κ³ μœ ν•œ λ²ˆν˜ΈλŠ” 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 κ°‘μ˜·μ„ λ§Œλ“€ 수 μžˆλŠ” 개수λ₯Ό 좜λ ₯ν•œλ‹€.


μ½”λ“œ

import sys
input = sys.stdin.readline

n  = int(input()) #재료수
ansNum = int(input()) # μ™„μ„±λ²ˆν˜Έ
nums = list(map(int,input().split())) #μž¬λ£Œλ“€ 리슀트

nums = sorted(nums)

count = 0 #μ •λ‹΅ 카운트
start_index = 0
end_index = n-1

# μž…λ ₯값이 ν¬λ―€λ‘œ νˆ¬ν¬μΈν„° μ‚¬μš©ν•˜κΈ°
while start_index!=end_index: #start μΈλ±μŠ€κ°€ κ²°κ΅­ nμ΄λž‘ κ°™κΈ° μ „κΉŒμ§€ λŒκ²ƒμž„.

    if nums[start_index]+nums[end_index] < ansNum:
        start_index+=1
    elif nums[start_index]+nums[end_index] > ansNum:
        end_index-=1
    else: #같은 경우
        count+=1
        start_index+=1

print(count)

풀이

재료의 쀑볡을 ν¬ν•¨ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ–‘ 끝에 νˆ¬ν¬μΈν„°λ₯Ό 두고 ꡬ간을 μ’νžˆλ©΄μ„œ 닡을 μ°Ύμ•„λ‚˜κ°„λ‹€.
정닡을 μ°Ύμ€κ²½μš° μ‹œμž‘ 인덱슀λ₯Ό μ¦κ°€μ‹œμΌœμ€˜μ•Ό 반볡문의 νƒˆμΆœ 쑰건에 λΆ€ν•©ν•  수 μžˆλ‹€.


profile
기둝을 μ •λ¦¬ν•˜λŠ” 곡간!

0개의 λŒ“κΈ€