๐Ÿงฉ Algorithm/[Programmers] Level 1

[Programmers] L1. ๋ชจ์˜๊ณ ์‚ฌ (์™„์ „ํƒ์ƒ‰/Python)

devCloud 2024. 11. 6. 16:23
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ’€์ด

๊ฐ ์ˆ˜ํฌ์ž์˜ ํŒจํ„ด ์ •์˜

  • ๊ฐ ์ˆ˜ํฌ์ž๋Š” ๋ฌธ์ œ๋ฅผ ์ฐ๋Š” ์ผ์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ˆ˜ํฌ์ž๋Š” [1, 2, 3, 4, 5], ๋‘ ๋ฒˆ์งธ๋Š” [2, 1, 2, 3, 2, 4, 2, 5], ์„ธ ๋ฒˆ์งธ๋Š” [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]๋ผ๋Š” ํŒจํ„ด์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋‹ต์„ ์ฐ๋Š”๋‹ค.

์ •๋‹ต๊ณผ ๋น„๊ตํ•˜์—ฌ ๋งžํžŒ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ

  • ์ฃผ์–ด์ง„ answers ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ ์ˆ˜ํฌ์ž์˜ ํŒจํ„ด์„ ๋ฐ˜๋ณต ๋น„๊ตํ•˜์—ฌ ๋งžํžŒ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.
  • j ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ์ˆ˜ํฌ์ž ํŒจํ„ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถฐ ๊ฐ€๋ฉฐ ๋น„๊ตํ•˜๊ณ , j๊ฐ€ ํŒจํ„ด ๊ธธ์ด์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์‹œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ํŒจํ„ด์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋ชจ๋“  ์ˆ˜ํฌ์ž์˜ ์ ์ˆ˜ ๋น„๊ต

  • ๊ฐ ์ˆ˜ํฌ์ž๊ฐ€ ๋งžํžŒ ์ ์ˆ˜๋ฅผ cnt ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.
  • cnt์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ์ฐพ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ์ˆ˜ํฌ์ž์˜ ๋ฒˆํ˜ธ๋ฅผ answer ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

๊ฐ€์žฅ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๋งžํžŒ ์ˆ˜ํฌ์ž ๋ฐ˜ํ™˜

  • answer ๋ฆฌ์ŠคํŠธ์—๋Š” ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ์ˆ˜ํฌ์ž์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉฐ, ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Solution

def correct(student_answer, answers):  # ์ •๋‹ต ๊ณ„์‚ฐ ํ•จ์ˆ˜
    cnt, j = 0, 0
    for i in range(len(answers)):
        if answers[i] == student_answer[j]:  
            cnt += 1
        j += 1  # ๋‹ค์Œ ๋ฌธ์ œ๋กœ 
        if j >= len(student_answer): 
            j = 0

    return cnt

def solution(answers):
    answer = []
    one = correct([1, 2, 3, 4, 5], answers)  # 1๋ฒˆ ์ˆ˜ํฌ์ž
    two = correct([2, 1, 2, 3, 2, 4, 2, 5], answers)  # 2๋ฒ„ ์ˆ˜ํฌ์ž
    three = correct([3, 3, 1, 1, 2, 2, 4, 4, 5, 5], answers)  # 3๋ฒˆ ์ˆ˜ํฌ์ž
    cnt = [one, two, three]  # ์ •๋‹ต ๊ฐœ์ˆ˜ ์ €์žฅ
    
    max_cnt = max(cnt)  # ์ •๋‹ต ๊ฐœ์ˆ˜ ์ค‘ ์ตœ๋Œ“๊ฐ’ ์ €์žฅ
    for i in range(3):  
        if max_cnt == cnt[i]:  # ์ตœ๋Œ€ ์ •๋‹ต ์ˆ˜์™€ ๊ฐ™์œผ๋ฉด
            answer.append(i + 1)  # ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    return answer

 

 

๊ฐœ์„ ํ•  ์ 

  • correct() ํ•จ์ˆ˜์—์„œ ์ธ๋ฑ์Šค ๊ด€๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด enumerate()์™€ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ %๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • solution() ํ•จ์ˆ˜์—์„œ for ๋ฃจํ”„ ์—†์ด ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์œผ๋กœ ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ์–ป์€ ํ•™์ƒ์„ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐœ์„ ๋œ ์ฝ”๋“œ

def correct(student_answer, answers):
    return sum(1 for i, ans in enumerate(answers) if ans == student_answer[i % len(student_answer)])

def solution(answers):
    patterns = [
        [1, 2, 3, 4, 5], 
        [2, 1, 2, 3, 2, 4, 2, 5], 
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]
    scores = [correct(pattern, answers) for pattern in patterns]
    max_score = max(scores)
    
    return [i + 1 for i, score in enumerate(scores) if score == max_score]

 


๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์ด ๋ฌธ์ œ๋Š” Level 1 ์ธ๋ฐ๋„ ์ƒ๋‹นํžˆ ๊ธด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ๋‹ค. ๋‚ด ํ’€์ด๋งŒ ๊ทธ๋Ÿฐ ์ค„ ์•Œ์•˜๋Š”๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๋งŒ๋งŒ์น˜ ์•Š๊ฒŒ ๊ธธ์–ด์„œ ๋งž๊ฒŒ ํ’€์—ˆ๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค. 

 

์˜์™ธ๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚œ ๊ณณ์€ max ๊ฐ’์„ ์ฐพ์„ ๋•Œ์˜€๋‹ค. ๋‹ค์Œ์€ ์ดˆ๊ธฐ์— ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ์ด๋‹ค.

max_answer = 0
    for i in range(len(cnt)):
        if cnt[i] >= max_answer:
            max_answer = cnt[i]
            answer.append(i + 1)
  • ์ฝ”๋“œ์—์„œ๋Š” `if cnt[i] >= max_answer` ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•ด ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ๋ฐ”๋กœ `answer` ๋ฐฐ์—ด์— ์ ์ˆ˜๊ฐ€ ๊ฐ™์€ ์‚ฌ๋žŒ๋„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ ์ด์ „์— ์ถ”๊ฐ€๋œ ์‚ฌ๋žŒ๋“ค์„ `answer` ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด์„œ, ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ์‚ฌ๋žŒ๋“ค์ด ์•„๋‹Œ, ๊ทธ ์ด์ „์— ๊ณ ๋ ค๋œ ์‚ฌ๋žŒ๋“ค๊นŒ์ง€ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ถ€๋ถ„๊นŒ์ง„ ๋ฏธ์ฒ˜ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ–ˆ์–ด์„œ ์•„์‰ฌ์› ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๋ฐ”๋กœ ์ˆ˜์ •ํ•ด์„œ 2ํŠธ๋งŒ์— ์„ฑ๊ณตํ–ˆ๋‹ค. ์†”์งํžˆ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ์ œ์ถœ์ด ์•ˆ ๋  ์ค„ ์•Œ์•˜๋‹ค. ์—ฐ์Šต๋ฌธ์ œ ๋ง๊ณ ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ํ’€์–ด๋„ ์ซ„์ง€ ๋ง์ž. 

 

๊ฐœ์„ ๋œ ์ฝ”๋“œ๋„ ๋‹ค์‹œ ๋ณด๋ฉฐ ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜์ž.


 

728x90