Coding/Code in the Morning

220307_code everyday(숫자 μΉ΄λ“œ2)

κΉ€μœ λ‹ˆμ½˜ 2022. 3. 7. 16:47

πŸ’¬ 문제 μ„€λͺ…

숫자 μΉ΄λ“œλŠ” μ •μˆ˜ ν•˜λ‚˜κ°€ μ ν˜€μ Έ μžˆλŠ” μΉ΄λ“œμ΄λ‹€. μƒκ·Όμ΄λŠ” 숫자 μΉ΄λ“œ N개λ₯Ό 가지고 μžˆλ‹€. μ •μˆ˜ Mκ°œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 μˆ˜κ°€ μ ν˜€μžˆλŠ” 숫자 μΉ΄λ“œλ₯Ό 상근이가 λͺ‡ 개 가지고 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

πŸ“ μ œν•œ 사항

첫째 μ€„에 μƒκ·Όμ΄κ°€ κ°€μ§€κ³  μžˆλŠ” μˆ«μž μΉ΄λ“œμ˜ κ°œμˆ˜ N(1 ≤ N ≤ 500,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ μ€„μ—λŠ” μˆ«μž μΉ΄λ“œμ— μ ν˜€μžˆλŠ” μ •μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μˆ«μž μΉ΄λ“œμ— μ ν˜€μžˆλŠ” μˆ˜λŠ” -10,000,000보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10,000,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€.

μ…‹μ§Έ μ€„μ—λŠ” M(1 ≤ M ≤ 500,000)이 μ£Όμ–΄μ§„λ‹€. λ„·μ§Έ μ€„μ—λŠ” μƒκ·Όμ΄κ°€ λͺ‡ κ°œ κ°€μ§€κ³  μžˆλŠ” μˆ«μž μΉ΄λ“œμΈμ§€ κ΅¬ν•΄μ•Ό ν•  M개의 μ •μˆ˜κ°€ μ£Όμ–΄μ§€λ©°, μ΄ μˆ˜λŠ” κ³΅λ°±μœΌλ‘œ κ΅¬λΆ„λ˜μ–΄μ Έ μžˆλ‹€. μ΄ μˆ˜λ„ -10,000,000보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10,000,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€.

 

 

첫째 쀄에 μž…λ ₯으둜 주어진 M개의 μˆ˜μ— λŒ€ν•΄μ„œ, 각 μˆ˜κ°€ 적힌 숫자 μΉ΄λ“œλ₯Ό 상근이가 λͺ‡ 개 가지고 μžˆλŠ”μ§€λ₯Ό 곡백으둜 ꡬ뢄해 좜λ ₯ν•œλ‹€.

 

πŸ’‘ ν•΄μ„€ 

from sys import stdin
_ = stdin.readline()
N = map(int,stdin.readline().split())
_ = stdin.readline()
M = map(int,stdin.readline().split())
hashmap = {}
for n in N:
    if n in hashmap:
        hashmap[n] += 1
    else:
        hashmap[n] = 1

print(' '.join(str(hashmap[m]) if m in hashmap else '0' for m in M))

 

 

πŸ’‘ TIL 1.  sys.stdin.readline() μ‚¬μš©λ²•

-  input()λŒ€μ‹  sys.stdin.readline()을 μ‚¬μš©ν•˜λŠ” 이유: 
 ν•œ 두 쀄 μž…λ ₯λ°›λŠ” λ¬Έμ œλ“€κ³Ό λ‹€λ₯΄κ²Œ, 반볡문으둜 μ—¬λŸ¬μ€„μ„ μž…λ ₯ λ°›μ•„μ•Ό ν•  λ•ŒλŠ” input()으둜 μž…λ ₯ λ°›λŠ”λ‹€λ©΄ μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έ. 

 

πŸ“Œ ν•œ 개의 μ •μˆ˜λ₯Ό μž…λ ₯받을 λ•Œ

import sys
a = int(sys.stdin.readline())

😨 κ·Έλƒ₯ a = sys.stdin.readline() ν•˜λ©΄ μ•ˆλ˜λ‚˜μš”?
πŸ‘‰ sys.stdin.readline()은 ν•œμ€„ λ‹¨μœ„λ‘œ μž…λ ₯λ°›κΈ° λ•Œλ¬Έμ—, κ°œν–‰λ¬Έμžκ°€ 같이 μž…λ ₯ λ°›μ•„μ§‘λ‹ˆλ‹€.
λ§Œμ•½ 3을 μž…λ ₯ν–ˆλ‹€λ©΄, 3\n μ΄ μ €μž₯되기 λ•Œλ¬Έμ—, κ°œν–‰λ¬Έμžλ₯Ό μ œκ±°ν•΄μ•Ό ν•©λ‹ˆλ‹€.
λ˜ν•œ, λ³€μˆ˜ νƒ€μž…μ΄ λ¬Έμžμ—΄ ν˜•νƒœ(str)둜 μ €μž₯되기 λ•Œλ¬Έμ—, μ •μˆ˜λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ ν˜•λ³€ν™˜μ„ 거쳐야 ν•©λ‹ˆλ‹€.

πŸ“Œ 정해진 개수의 μ •μˆ˜λ₯Ό ν•œμ€„μ— μž…λ ₯받을 λ•Œ

import sys
a,b,c = map(int,sys.stdin.readline().split())

map()은 반볡 κ°€λŠ₯ν•œ 객체(리슀트 λ“±)에 λŒ€ν•΄ 각각의 μš”μ†Œλ“€μ„ μ§€μ •λœ ν•¨μˆ˜λ‘œ μ²˜λ¦¬ν•΄μ£ΌλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
μœ„μ™€ 같이 μ‚¬μš©ν•œλ‹€λ©΄ a,b,c에 λŒ€ν•΄ 각각 intν˜•μœΌλ‘œ ν˜•λ³€ν™˜μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ  μž„μ˜μ˜ 개수의 μ •μˆ˜λ₯Ό ν•œμ€„μ— μž…λ ₯λ°›μ•„ λ¦¬μŠ€νŠΈμ— μ €μž₯ν•  λ•Œ

import sys
data = list(map(int,sys.stdin.readline().split()))

 

πŸ’‘ TIL 2.  해쉬 ν…Œμ΄λΈ”(Hash Table)

  • Hash table: ν‚€(key)에 데이터(value)λ₯Ό μ €μž₯ν•˜λŠ” 데이터 ꡬ쑰 
    • keyλ₯Ό 톡해 λ°”λ‘œ 데이터λ₯Ό λ°›μ•„μ˜¬ 수 μžˆμœΌλ―€λ‘œ, 속도가 획기적으둜 빨라짐
    • 파이썬 dictionary type이 ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 예! λ”°λΌμ„œ νŒŒμ΄μ¬μ—μ„œλŠ” λ³„λ„λ‘œ 해쉬λ₯Ό κ΅¬ν˜„ν•  μ΄μœ κ°€ μ—†μŒ. λ°”λ‘œ λ”•μ…”λ„ˆλ¦¬λ₯Ό μ“°λ©΄ λ˜λ―€λ‘œ! 

πŸ’‘ TIL 3.  underscore('_')의 μš©λ„ 

  1. μΈν„°ν”„λ¦¬ν„°μ—μ„œ μ‚¬μš©λ˜λŠ” 경우
    파이썬 μΈν„°ν”„λ¦¬ν„°μ—μ„œ λ§ˆμ§€λ§‰μ— μ‹€ν–‰λœ λͺ…λ Ήμ˜ 결과값이 '_'에 μ €μž₯λœλ‹€.

   

 

2. 값을 λ¬΄μ‹œν•˜λŠ” 경우 

  • νŠΉμ • 값을 λ¬΄μ‹œν•˜λŠ” κ²½μš°μ—λ„ μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, νŠœν”Œμ˜ μ—¬λŸ¬ ν•­λͺ©λ“€μ˜ μ—¬λŸ¬ 개의 λ³€μˆ˜μ— ν• λ‹Ήν•˜λ €κ³  ν•  λ•Œ: 

 

3. νŠΉλ³„ν•œ 넀이밍을 ν•˜λŠ” 경우

 

4. 숫자 λ¦¬ν„°λŸ΄ κ°’μ˜ 자리수 ꡬ뢄을 μœ„ν•œ κ΅¬λΆ„μžλ‘œ μ‚¬μš©ν•˜λŠ” 경우 

 

 

πŸ‘‰πŸ» 문제 λ°”λ‘œκ°€κΈ° 

 

 

μ°Έκ³ : https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline
https://m.blog.naver.com/r00tdr4g0n/222048818309​