๐Ÿงฉ Algorithm/SWEA

[SWEA] 1945. ์†Œ์ธ์ˆ˜๋ถ„ํ•ด (Python/D2)

devCloud 2024. 10. 16. 18:34
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰ https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq


์„ค๋ช…

์ˆซ์ž N์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


N์ด ์ฃผ์–ด์งˆ ๋•Œ a, b, c, d, e ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

 

ํ’€์ด

sol.1

 

a, b, c, d, e๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

index = [0]*5

 

 

์ˆซ์ž๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ์ฆ‰, ๋‹ค ๋‚˜๋ˆ ์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. 

while num > 1:
    if num % 2 == 0:
        num //= 2
        index[0] += 1
    elif num % 3 == 0:
    	num //= 3
        index[1] += 1
    ...
  • 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ 0์ผ ๋•Œ(2๋กœ ๋‚˜๋ˆ ์งˆ ๋•Œ) ๋ชซ์„ num์— ์ €์žฅํ•œ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— 1์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • 2๋กœ ๋‚˜๋‰˜์–ด์ง€์ง€ ์•Š์œผ๋ฉด 3์œผ๋กœ ๋‚˜๋‰˜์–ด์ง€๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • 3์œผ๋กœ ๋‚˜๋‰˜์–ด์ง€๋ฉด ๋ชซ์„ num์— ์ €์žฅํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— 1์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ์ด๋ ‡๊ฒŒ 11๊นŒ์ง€ ํ™•์ธํ•˜๊ณ , ๋” ์ด์ƒ ๋‚˜๋‰˜์–ด์ง€์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

sol.2

 

๋ฐฐ์—ด์— ๋‚˜๋ˆŒ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ๋„ ์ƒ์„ฑํ•œ๋‹ค.

index = [2, 3, 5, 7, 11]
result = [0]*5

 

 

์œ„์—์„œ ์ƒ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉ

for i in range(5):
    while num % index[i] == 0:
        result[i] += 1
        num //= index[i]
  • ๋จผ์ €, ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค, ์ˆซ์ž๊ฐ€ 2๋กœ ๋‚˜๋‰˜์–ด์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๋‚˜๋‰˜์ง€๋ฉด result ์ฒซ ๋ฒˆ์ฉจ ์ธ๋ฑ์Šค์— 1์„ ์ฆ๊ฐ€ํ•˜๊ณ , 2๋กœ ๋‚˜๋ˆˆ ๋ชซ์„ num์— ๋‹ค์‹œ ์ €์žฅํ•œ๋‹ค.
  • ๊ทธ ๋‹ค์Œ ์ธ๋ฑ์Šค, ์ˆซ์ž๊ฐ€ 3์œผ๋กœ ๋‚˜๋‰˜์–ด์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๋‚˜๋‰˜์ง€๋ฉด result ๋‘ ๋ฒˆ์ฉจ ์ธ๋ฑ์Šค์— 1์„ ์ฆ๊ฐ€ํ•˜๊ณ , 3์œผ๋กœ ๋‚˜๋ˆˆ ๋ชซ์„ num์— ๋‹ค์‹œ ์ €์žฅํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

Solution

sol.1

test_case = int(input())
for t in range(1, test_case + 1):
    num = int(input())
    index = [0]*5
    while num > 1:
        if num % 2 == 0:
            num //= 2
            index[0] += 1
        elif num % 3 == 0:
            num //= 3
            index[1] += 1
        elif num % 5 == 0:
            num //= 5
            index[2] += 1
        elif num % 7 == 0:
            num //= 7
            index[3] += 1
        elif num % 11 == 0:
            num //= 11
            index[4] += 1

    print("#%d" %t, end=' ')
    for i in index:
        print(i, end=' ')
    print()

 

 

sol.2

test_case = int(input())
for t in range(1, test_case + 1):
    num = int(input())
    index = [2, 3, 5, 7, 11]
    result = [0]*5
    for i in range(5):
        while num % index[i] == 0:
            result[i] += 1
            num //= index[i]
    print(f'#{t}', *result)

 

 

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

์ถœ๋ ฅํ•  ๋•Œ ์ถœ๋ ฅ ํ˜•์‹์„ ์ข€ ๋” ํ™œ์šฉํ•˜์ž.

print(f'#{t}', *result)

 

728x90