Codility - μ•Œκ³ λ¦¬μ¦˜(1) FirstUnique - python🐍

이라운·2022λ…„ 11μ›” 12일
0
post-thumbnail

πŸ“’Codility μ•Œκ³ λ¦¬μ¦˜ 문제

πŸ†Žμ˜μ–΄ν•΄μ„λ³Έ

N 개의 μ •μˆ˜λ‘œ κ΅¬μ„±λœ λΉ„μ–΄μžˆμ§€ μ•Šμ€ λ°°μ—΄ A κ°€ 주어진닀. μœ μΌν•œ μˆ«μžλž€ λ°°μ—΄ λ‚΄μ—μ„œ 단 1개만 μ‘΄μž¬ν•˜λŠ” 숫자λ₯Ό μ˜λ―Έν•œλ‹€.

예λ₯Ό λ“€μ–΄, A κ°€ μ•„λž˜μ˜ λ°°μ—΄κ³Ό κ°™λ‹€λ©΄:

  A[0] = 4
  A[1] = 10
  A[2] = 5
  A[3] = 4
  A[4] = 2
  A[5] = 10

5와 2의 2개의 μœ μΌν•œ 숫자λ₯Ό 가지고 μžˆλ‹€.

A λ°°μ—΄μ—μ„œ μœ μΌν•œ 숫자 쀑 처음 λ‚˜μ˜€λŠ” 것을 μ°Ύμ•„μ•Ό ν•œλ‹€. λ‹€λ₯Έ 말둜, κ°€μž₯ μž‘μ€ idx λ₯Ό 가진 μœ μΌν•œ 숫자λ₯Ό μ°Ύμ•„μ•Ό λœλ‹€.

μœ„λ₯Ό μ˜ˆμ‹œλ‘œ 보자면, 5의 idx λŠ” 2 이고, 2λŠ” 4이기 λ•Œλ¬Έμ— 정닡은 5이닀.

ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄λΌ

def solution(A)

μœ„μ™€ 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ‘œ
λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©° N 개의 μ •μˆ˜λ‘œ κ΅¬μ„±λœ A λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μœΌλ©° 처음의 μœ μΌν•œ 숫자λ₯Ό λ°˜ν™˜ν•˜λŠ” ν˜•νƒœλ₯Ό κ°€μ Έμ•Όν•œλ‹€. λ§Œμ•½ μœ μΌν•œ μˆ«μžκ°€ μ—†λ‹€λ©΄ -1 을 λ°˜ν™˜ν•΄λΌ.

예λ₯Ό λ“€μ–΄, μ•„λž˜κ°€ 주어진닀면

  A[0] = 1
  A[1] = 4
  A[2] = 3
  A[3] = 3
  A[4] = 1
  A[5] = 2

ν•¨μˆ˜λŠ” 4λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€. 4, 2 2개의 μœ μΌν•œ μˆ«μžκ°€ μžˆμ§€λ§Œ 4κ°€ 2보닀 λ¨Όμ € λ‚˜μ™”κΈ° λ•Œλ¬Έμ΄λ‹€.

μ•„λž˜μ™€ 같은 A 배열이 주어진닀면

  A[0] = 6
  A[1] = 4
  A[2] = 4
  A[3] = 6

ν•¨μˆ˜λŠ” -1 을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€. μœ μΌν•œ μˆ«μžκ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

μ•„λž˜μ˜ 쑰건을 λ§Œμ‘±μ‹œν‚¬ 수 μžˆλŠ” 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ„±ν•˜λΌ

N은 μ •μˆ˜λ‘œ 1 μ—μ„œ 10λ§Œκ°œκΉŒμ§€ 주어진닀.
A 배열에 λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 값은 0μ—μ„œλΆ€ν„° 10μ–΅κΉŒμ§€μ΄λ‹€.

πŸ’‘ν’€μ΄

문제 쑰건을 λ³΄λ‹ˆκΉŒ 숫자의 λ²”μœ„κ°€ 10μ–΅... μ΄λΌμ„œ count 배열을 λ§Œλ“œλŠ” 것이 μ•„λ‹Œ, dict ν˜•μ‹μœΌλ‘œ 문제λ₯Ό ν’€μ—ˆλ‹€.
ν’€λ‹€κ°€ μƒκ°ν•΄λ³΄λ‹ˆ 파이썬의 dict λŠ” μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•Šμ•˜λ˜ 것이 κΈ°μ–΅λ‚˜λ©΄μ„œ κ²€μƒ‰ν•΄λ³΄λ‹ˆ
3.6 λ²„μ „λΆ€ν„°λŠ” μˆœμ„œλ₯Ό 보μž₯ν•΄μ€€λ‹€κ³  ν•œλ‹€.
즉, λ“€μ–΄μ˜¨ μˆœμ„œλ₯Ό μœ μ§€ν•œλ‹€λŠ” 것이닀.

파이썬 κ³΅μ‹λ¬Έμ„œ dict

def solution(A):
    count = {}
    ans = -1
    for a in A:
        if str(a) in count:
            count[str(a)] = count.get(str(a)) + 1
        else:
            count[str(a)] = 1
    for k, v in count.items():
        if v == 1:
            ans = int(k)
            break
    return ans

πŸ“œκ²°κ³Όν™”λ©΄

profile
Programmer + Poet = Proet

0개의 λŒ“κΈ€