MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 4375๋ฒˆ: 1 ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 4375๋ฒˆ: 1

MUKER 2023. 4. 29. 15:33
 

4375๋ฒˆ: 1

2์™€ 5๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์ •์ˆ˜ n(1 ≤ n ≤ 10000)๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ n์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net


์„ฑ๊ณต ํ’€์ด

while let n = readLine(), let num = Int(n) {
    var x = 1, count = 1
    while x % num != 0 {
        x = (x*10+1) % num
        print(x)
        count += 1
    }
    print(count)
}

ํ’€์ด ํ‚ค์›Œ๋“œ

์ฃผ์–ด์ง„ ์ •์ˆ˜ n์˜ ๋ฐฐ์ˆ˜๊ฐ€ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„(1, 11, 11, 111...)์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ, ํ•ด๋‹น ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ๊ฐ’: n = 7
x = 1
count = 1

while x % n์ด 0์ผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต {
	
    x = (x*10+1) % 7
    count += 1
    
    while๋ฌธ์ด ๋ฐ˜๋ณตํ•  ๋•Œ x์— ํ• ๋‹น๋˜๋Š” ๊ฐ’
    11 % 7 = 4
    41 % 7 = 6
    61 % 7 = 5
    51 % 7 = 2
    21 % 7 = 0
    
    111111์ผ ๋•Œ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ 7์˜ ์ตœ์†Œ ๋ฐฐ์ˆ˜๊ฐ€ ๋จ

}


๋งŒ์•ฝ ํ•ด๋‹น ํ’€์ด๋ฅผ ๋ชจ๋“ˆ๋Ÿฌ์—ฐ์‚ฐ์œผ๋กœ ํ’€์ง€ ์•Š๋Š”๋‹ค๋ฉด x์˜ ๊ฐ’์€ Int์˜ ๋ฒ”์œ„๋ฅผ ์•„๋“ํžˆ ๋„˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•˜๊ธฐ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ํ•ด์•ผํ•  ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์˜ ๊ณต์‹์ž…๋‹ˆ๋‹ค.

(a + b) mod n = (a mod n + b mod n) mod n
(a * b) mod n = (a mod n * b mod n) mod n

ํ•ด๋‹น ๊ณต์‹์„ ๋Œ€์ž…ํ•ด while๋ฌธ ์•ˆ์— ์žˆ๋Š” x = (x*10+1) % 7์„ ๋ถ„์„ํ•œ๋‹ค๋ฉด

 1 % 7 == 1
 11 % 7 == (1*10+1)%7 == ((1%7)*10+1)%7
 111 % 7 == (11*10+1)%7 == ((11%7)*10+1)%7
 1111 % 7 == (111*10+1)%7 == ((111%7)*10+1)%7

x๊ฐ€ ์–ด๋–ป๊ฒŒ 1๋กœ์ด๋ฃจ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.