https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์„ค๋ช…

์ˆซ์ž๋‚˜๋ผ ๊ธฐ์‚ฌ๋‹จ์˜ ๊ฐ ๊ธฐ์‚ฌ์—๊ฒŒ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ number๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ๋“ค์€ ๋ฌด๊ธฐ์ ์—์„œ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๊ธฐ์‚ฌ๋Š” ์ž์‹ ์˜ ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ์˜ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง„ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ด์›ƒ๋‚˜๋ผ์™€์˜ ํ˜‘์•ฝ์— ์˜ํ•ด ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ •ํ•˜๊ณ , ์ œํ•œ์ˆ˜์น˜๋ณด๋‹ค ํฐ ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง„ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์‚ฌ๋Š” ํ˜‘์•ฝ๊ธฐ๊ด€์—์„œ ์ •ํ•œ ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง€๋Š” ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 15๋ฒˆ์œผ๋กœ ์ง€์ •๋œ ๊ธฐ์‚ฌ๋‹จ์›์€ 15์˜ ์•ฝ์ˆ˜๊ฐ€ 1, 3, 5, 15๋กœ 4๊ฐœ ์ด๋ฏ€๋กœ, ๊ณต๊ฒฉ๋ ฅ์ด 4์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ด์›ƒ๋‚˜๋ผ์™€์˜ ํ˜‘์•ฝ์œผ๋กœ ์ •ํ•ด์ง„ ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๊ฐ€ 3์ด๊ณ  ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ดˆ๊ณผํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ์ด 2๋ผ๋ฉด, 15๋ฒˆ์œผ๋กœ ์ง€์ •๋œ ๊ธฐ์‚ฌ๋‹จ์›์€ ๋ฌด๊ธฐ์ ์—์„œ ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๊ธฐ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ 1๋‹น 1kg์˜ ์ฒ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌด๊ธฐ์ ์—์„œ ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋‘ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ๋‹จ์›์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ number์™€ ์ด์›ƒ๋‚˜๋ผ์™€ ํ˜‘์•ฝ์œผ๋กœ ์ •ํ•ด์ง„ ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ limit์™€ ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ดˆ๊ณผํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ power๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฌด๊ธฐ์ ์˜ ์ฃผ์ธ์ด ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋‘ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

 

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ number ≤ 100,000
  • 2 ≤ limit ≤ 100
  • 1 ≤ power ≤ limit

 

์ž…์ถœ๋ ฅ ์˜ˆ

number limit power result
5 3 2 10
10 3 2 21

 

 

์†Œ์Šค ์ฝ”๋“œ
# 1 (์‹œ๊ฐ„ ์ดˆ๊ณผ)
def solution(number,limit,power):
    answer = 0
    knights = list(range(1,number+1))
    
    for knight in knights:
        cnt = 0
        for n in range(1,knight+1):
            if knight%n == 0:
                cnt += 1
        if cnt > limit:
            answer += power
        else:
            answer += cnt

    return answer

 

ํ’€์ด # 1

  • knights ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๊ธฐ์‚ฌ๋“ค์˜ ๋ฒˆํ˜ธ ๋‹ด๊ธฐ
  • knights ๋ฆฌ์ŠคํŠธ๋ฅผ ๋Œ๋ฉด์„œ ๊ฐ ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ์˜ ์•ฝ์ˆ˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ๋„ฃ๊ธฐ
    • cnt๊ฐ€ limit๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ •ํ•ด์ง„ power๋ฅผ answer์— ๋”ํ•˜๊ธฐ
    • cnt๊ฐ€ limit๋ณด๋‹ค ์ž‘๋‹ค๋ฉด cnt๋ฅผ answer์— ๋”ํ•˜๊ธฐ

 

# 2
def solution(number,limit,power):
    knights = list(range(1,number+1))
    knights_score = []
    
    for knight in knights:
        cnt = 0
        for n in range(1,int(knight**(1/2))+1):
            if knight%n == 0:
                cnt += 1
                if n**2 != knight: 
                    cnt += 1
            if cnt > limit:
                cnt = power
                break
        knights_score.append(cnt)

    return sum(knights_score)

 

ํ’€์ด #2

  • knights ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๊ธฐ์‚ฌ๋“ค์˜ ๋ฒˆํ˜ธ ๋‹ด๊ธฐ
  • knights ๋ฆฌ์ŠคํŠธ๋ฅผ ๋Œ๋ฉด์„œ ๊ฐ ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ์˜ ์•ฝ์ˆ˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ๋„ฃ๊ธฐ
    • ์ด ๋•Œ, ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€์˜ ๋ฒ”์œ„ ์‚ฌ์šฉ (์•ฝ์ˆ˜๋Š” ์ง์ด ์žˆ์œผ๋ฏ€๋กœ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ๋ฐ˜๋ณตํ•˜์—ฌ ์ดํ›„์— ์ œ๊ณฑ)
    • ์•ฝ์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ limit์„ ๋„˜์–ด๊ฐ€๋ฉด for๋ฌธ์„ ์ข…๋ฃŒํ•˜์—ฌ ์—ฐ์‚ฐ์˜ ์ˆ˜ ์ค„์ด๊ธฐ
  • knights_score ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๊ธฐ์‚ฌ์˜ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ
  • knights_score์˜ ํ•ฉ์„ ๋ฆฌํ„ด

 

 

์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ์š”...? ์ œ์ถœํ•˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋œจ๋‹ˆ๊นŒ ์•„์ฐ”ํ•ด์„œ ์ธ์ƒ์˜ ์žฌ๋ฏธ๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ’€์ด๋กœ ํ–ˆ์„ ๋•Œ ํ…Œ์ŠคํŠธ1์— 3000ms ๊ฑธ๋ ธ๋Š”๋ฐ ๋‘ ๋ฒˆ์งธ ํ’€์ด๋กœ ํ•˜๋‹ˆ๊นŒ 50ms๊ฐ€ ๋‚˜์™”๋‹ค. ๋‘ ๋ฒˆ์งธ ํ’€์ด๋Š” ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฐธ๊ณ ํ–ˆ๋Š”๋ฐ ์„ค๋ช…์„ ์ž˜ํ•ด์ฃผ์…”์„œ ์ดํ•ด๊ฐ€ ์ž˜ ๋๋‹ค.

+ Recent posts