λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] 방 번호 (#1475)

 

문제 

 

λ‹€μ†œμ΄λŠ” μ€μ§„μ΄μ˜ μ˜†μ§‘μ— μƒˆλ‘œ 이사왔닀. λ‹€μ†œμ΄λŠ” 자기 λ°© 번호λ₯Ό 예쁜 ν”ŒλΌμŠ€ν‹± 숫자둜 문에 뢙이렀고 ν•œλ‹€.

λ‹€μ†œμ΄μ˜ μ˜†μ§‘μ—μ„œλŠ” ν”ŒλΌμŠ€ν‹± 숫자λ₯Ό ν•œ μ„ΈνŠΈλ‘œ νŒλ‹€. ν•œ μ„ΈνŠΈμ—λŠ” 0λ²ˆλΆ€ν„° 9λ²ˆκΉŒμ§€ μˆ«μžκ°€ ν•˜λ‚˜μ”© λ“€μ–΄μžˆλ‹€. λ‹€μ†œμ΄μ˜ λ°© λ²ˆν˜Έκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, ν•„μš”ν•œ μ„ΈνŠΈμ˜ 개수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜μ‹œμ˜€. (6은 9λ₯Ό λ’€μ§‘μ–΄μ„œ μ΄μš©ν•  수 있고, 9λŠ” 6을 λ’€μ§‘μ–΄μ„œ μ΄μš©ν•  수 μžˆλ‹€.)

 

 

μž…λ ₯ 

 

첫째 쀄에 λ‹€μ†œμ΄μ˜ λ°© 번호 N이 주어진닀. N은 1,000,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

 

 

좜λ ₯

 

첫째 쀄에 ν•„μš”ν•œ μ„ΈνŠΈμ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

 

λ‚˜μ˜ μ½”λ“œ
N = str(input())
new_array = []
N = N.replace('9','6') # 9λŠ” μ „λΆ€ 6으둜 λ°”κΏˆ
cnt = 0
P = list(set(N)) # 쀑볡을 μ œμ™Έν•œ 숫자 개수 비ꡐ 집단 생성
P.sort()
for i in P:
  for t in N:
    if i == t: 
      if t == '6': 
        if N.count('6') % 2 == 0:
          cnt = N.count('6') // 2
          new_array.append(cnt)
          break
        else:
          cnt = (N.count('6') // 2) + 1
          new_array.append(cnt)
          break
      cnt += 1
      new_array.append(cnt)
  cnt = 0
print(max(new_array))
뢄석 > 이 λ¬Έμ œλŠ” λ°˜λ‘€λ₯Ό μƒκ°ν•˜λŠ”κ²Œ κ½€ κΉŒλ‹€λ‘œμ› λ˜ λ¬Έμ œμ˜€λ‹€. μ²˜μŒμ—λŠ” λ¬Έμžμ—΄μ˜ '6'의 cnt에 따라 μ„ΈνŠΈκ°€ λ‚˜λ‰˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜μ˜€μ§€λ§Œ, κ·Έλ ‡κ²Œ ν•˜λ©΄ 6의 κ°œμˆ˜λ³΄λ‹€ λ‚˜λ¨Έμ§€ 숫자 쀑 μ€‘λ³΅μˆ˜κ°€ 더 λ§Žμ€ 경우 μ˜€λ‹΅μ΄ λ°œμƒν–ˆλ‹€. κ·Έλ ‡κ²Œ ν•΄μ„œ μ’€ 더 문제λ₯Ό μΌλ°˜ν™”ν•΄μ„œ 생각해 보기둜 ν•˜μ˜€κ³ , κ·ΈλŸ¬λ‹€κ°€ κΉ¨λ‹«κ²Œ 된 것이 전체 λ¬Έμžμ—΄ 쀑 μ€‘λ³΅λ˜λŠ” 수의 κ°œμˆ˜κ°€ κ°€μž₯ λ§Žμ€ 숫자λ₯Ό κΈ°μ€€μœΌλ‘œ μ„ΈνŠΈκ°€ λ‚˜λ‰œλ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€. 그리고 이λ₯Ό μ…€ λ•Œμ— 6의 경우 ν•œ μ„ΈνŠΈ λ‹Ή 두 κ°œκ°€ λ“€μ–΄μžˆμ–΄λ„ λ¬΄κ΄€ν•˜λ―€λ‘œ 이λ₯Ό κ³ λ €ν•˜μ—¬ 수λ₯Ό μ„Έμ£Όμ—ˆλ‹€. μ΄λ ‡κ²Œ λ‚˜μ˜¨ 수λ₯Ό μƒˆλ‘œμš΄ 배열에 λ„£μ–΄μ£Όκ³  λ°°μ—΄ μ€‘μ—μ„œ κ°€μž₯ 큰 수λ₯Ό 좜λ ₯ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€. 

 

 

μ’€ 더 효율적인 μ½”λ“œ
s=input().replace('9','6')
l=list(map(s.count,'012345678'))
l[6]=(l[6]+1)//2
print(max(l))
뢄석 > 이 μ½”λ“œμ˜ 경우 9λ₯Ό 6으둜 λ°”κΎΌλ‹€λŠ” 것은 λ‚΄κ°€ μƒκ°ν–ˆλ˜ λΆ€λΆ„κ³Ό λ™μΌν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ λ‹€λ₯Έ 점이 μžˆλ‹€λ©΄, λ‚˜λŠ” set λ°°μ—΄κ³Ό 일반 배열을 λΉ„κ΅ν•˜μ—¬ μƒˆλ‘œμš΄ 배열에 μΆ”κ°€λ₯Ό ν•΄μ£ΌλŠ” 방법을 μ„ νƒν•΄μ£Όμ—ˆμ§€λ§Œ 이 μ½”λ“œλŠ” ν•œ λ²ˆμ— mapν•¨μˆ˜λ₯Ό μ¨μ„œ '012345678' 의 각 숫자의 개수λ₯Ό μ„Έμ„œ λ¦¬μŠ€νŠΈμ— λ°”λ‘œ λ„£μ–΄μ£Όμ—ˆλ‹€λŠ” 점이 λ‹¬λžλ‹€. 그리고 6의 경우만 λ‹€λ₯΄κ²Œ μ„Έμ£Όλ©΄ λ°”λ‘œ λ¦¬μŠ€νŠΈμ—μ„œ max값을 좜λ ₯ν•˜ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€.