λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
κ°œμΈκ³΅λΆ€/Algorithm

[Level 2] nμ§„μˆ˜ κ²Œμž„

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 5. 23.

 

 

 

Algorithm

-  nμ§„μˆ˜ κ²Œμž„ -

 


 

문제

νŠœλΈŒκ°€ ν™œλ™ν•˜λŠ” μ½”λ”© λ™μ•„λ¦¬μ—μ„œλŠ” μ „ν†΅μ μœΌλ‘œ ν•΄μ˜€λŠ” κ²Œμž„μ΄ μžˆλ‹€.

이 κ²Œμž„μ€ μ—¬λŸ¬ μ‚¬λžŒμ΄ λ‘₯κΈ€κ²Œ μ•‰μ•„μ„œ 숫자λ₯Ό ν•˜λ‚˜μ”© μ°¨λ‘€λŒ€λ‘œ λ§ν•˜λŠ” κ²Œμž„μΈλ°, κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

1. 숫자λ₯Ό 0λΆ€ν„° μ‹œμž‘ν•΄μ„œ μ°¨λ‘€λŒ€λ‘œ λ§ν•œλ‹€.
첫 번째 μ‚¬λžŒμ€ 0, 두 번째 μ‚¬λžŒμ€ 1, ... μ—΄λ²ˆμ§Έ μ‚¬λžŒμ€ 9λ₯Ό λ§ν•œλ‹€.

2. 10 μ΄μƒμ˜ μˆ«μžλΆ€ν„°λŠ” ν•œ μžλ¦¬μ”© λŠμ–΄μ„œ λ§ν•œλ‹€.
즉 μ—΄ν•œ 번째 μ‚¬λžŒμ€ 10의 첫 자리인 1, 열두 번째 μ‚¬λžŒμ€ λ‘˜μ§Έ 자리인 0을 λ§ν•œλ‹€.

 

μ΄λ ‡κ²Œ κ²Œμž„μ„ 진행할 경우,

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, ... 순으둜 숫자λ₯Ό λ§ν•˜λ©΄ λœλ‹€.

 

ν•œνŽΈ μ½”λ”© 동아리 일원듀은 컴퓨터λ₯Ό λ‹€λ£¨λŠ” μ‚¬λžŒλ‹΅κ²Œ μ΄μ§„μˆ˜λ‘œ 이 κ²Œμž„μ„ μ§„ν–‰ν•˜κΈ°λ„ ν•˜λŠ”λ°, μ΄κ²½μš°μ—λŠ”

0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, ... 순으둜 λ§ν•˜λ©΄ λœλ‹€.

 

μ΄μ§„μˆ˜λ‘œ μ§„ν–‰ν•˜λŠ” κ²Œμž„μ— μ΅μˆ™ν•΄μ Έ μ§ˆλ €κ°€λ˜ μ‚¬λžŒλ“€μ€ μ’€ 더 λ‚œμ΄λ„λ₯Ό 높이기 μœ„ν•΄ μ΄μ§„λ²•μ—μ„œ μ‹­μœ‘μ§„λ²•κΉŒμ§€ λͺ¨λ“  μ§„λ²•μœΌλ‘œ κ²Œμž„μ„ μ§„ν–‰ν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€.

숫자 κ²Œμž„μ΄ μ΅μˆ™ν•˜μ§€ μ•Šμ€ νŠœλΈŒλŠ” κ²Œμž„μ— μ Έμ„œ λ²ŒμΉ™μ„ λ°›λŠ” κ΅΄μš•μ„ ν”Όν•˜κΈ° μœ„ν•΄, μžμ‹ μ΄ 말해야 ν•˜λŠ” 숫자λ₯Ό μŠ€λ§ˆνŠΈν°μ— 미리 좜λ ₯ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ €κ³  ν•œλ‹€.

튜브의 ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜λΌ.

 

- 진법 n, 미리 ꡬ할 숫자의 갯수 t, κ²Œμž„μ— μ°Έκ°€ν•˜λŠ” 인원 m, 튜브의 μˆœμ„œ pκ°€ 주어진닀.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

n t m p result
2 4 2 1 "0111"
16 16 2 1 "02468ACE11111111"

 

문제 ν’€κΈ°

 

μ²˜μŒμ— 문제λ₯Ό ν™•μΈν•˜λŠ”λ° 문제의 양이 κΈΈμ–΄μ„œ μ•½κ°„ λ©ˆμΉ«ν–ˆλŠ”λ° 문제λ₯Ό 잘 μ΄ν•΄ν•˜κ³  μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ—„μ²­ μ–΄λ €μš΄κ±΄ μ•„λ‹Œκ²ƒ κ°™λ‹€.

(μ•„... λ¬Όλ‘  λ‚΄ 닡이 μ΅œκ³ λŠ” μ•„λ‹ˆμ§€λ§Œ κ·Έλž˜λ„ ν†΅κ³Όλœκ²Œ μ–΄λ””μ•Ό...γ…‹γ…‹γ…‹)

 

일단 λ¬Έμ œμ—μ„œ nμ§„λ²•λœ 값을 λ‚΄κ°€ 말을 ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— nμ§„λ²•λœ 값을 λ”°λ‘œ μ €μž₯ν•΄λ‘λŠ”κ²Œ 쒋을 것 κ°™μ•„μ„œ while문을 μ‚¬μš©ν•΄μ„œ 지정해둔 λ²”μœ„κΉŒμ§€ nμ§„λ²•λœ 값을 numberStr에 담아두도둝 ν•˜μ˜€λ‹€.

 

μ΄λ•Œ λ²”μœ„λ₯Ό 't * m'으둜 ν•΄λ‘μ—ˆλŠ”λ° 큰 μ΄μœ κ°€ 있던건 μ•„λ‹ˆμ—ˆκ³  mλͺ…끼리 ν•˜λŠ”λ° λ‚΄κ°€ λ§ν•΄μ•Όν•˜λŠ” 수의 κ°œμˆ˜κ°€ t개 이기 λ•Œλ¬Έμ— μ΅œμ†Œν•œ tνšŒμ „μ€ λŒμ•„μ„œ κ²Œμž„μ΄ μ§„ν–‰λ˜κ² κ΅¬λ‚˜ μƒκ°ν•΄μ„œ 't * m'으둜 λ²”μœ„λ₯Ό μ§€μ •ν•΄λ‘μ—ˆλ‹€.

(λ§Œμ•½ n진법 λ˜μ—ˆμ„λ•Œ '10', '1111' μ΄λŸ°μ‹μœΌλ‘œ 길이가 1κ°œκ°€ μ•„λ‹ˆλ”λΌλ„ λ‚˜μ€‘μ— 자λ₯΄λ©΄ λœλ‹€λΌκ³  μƒκ°ν•΄μ„œ λ²”μœ„λ₯Ό μ €λ ‡κ²Œ μ„€μ •ν•΄λ‘μ—ˆλ‹€.)

 

이후에 이제 λ‚΄ μˆœμ„œκ°€ λ˜μ—ˆμ„ λ•Œ 말해야 ν•˜λŠ” 값을 result에 λ„£μ–΄μ•Όν–ˆλŠ”λ° μˆœμ„œκ°€ λ§Œμ•½ 첫번째이고 κ²Œμž„μ„ 2λͺ…μ΄μ„œ μ§„ν–‰λ˜λ©΄ 인덱슀 0, 2, 4, ... 번째의 값을 λ§ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ—μ„œ iμ—μ„œ κ²Œμž„μ„ μ§„ν–‰ν•˜λŠ” λͺ…μˆ˜λ₯Ό λ‚˜λˆ μ„œ μ—¬κΈ°μ„œ λ‚˜μ˜€λŠ” λ‚˜λ¨Έμ§€κ°€ λ‚΄μˆœμ„œμ—μ„œ -1ν•œ κ°’κ³Ό 같을 κ²½μš°μ— 값을 λ„£λŠ” κ²ƒμœΌλ‘œ 섀정을 ν•΄μ£Όμ—ˆλ‹€.

(-1을 ν•œκ±΄ 인덱슀 값을 κ³ λ €ν•΄ μ§„ν–‰ν•΄μ£Όμ—ˆλ‹€.)

 

이후 m개λ₯Ό λ‚΄λ³΄λ‚΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— sliceλ₯Ό μ‚¬μš©ν•˜κ³  μ˜ˆμ œμ—μ„œ λŒ€λ¬Έμžλ‘œ ν‘œν˜„λ˜λŠ” 것을 ν™•μΈν•˜κ³  toUpperCase()λ₯Ό μ‚¬μš©ν–ˆλ”λ‹ˆ λ¬Έμ œκ°€ ν†΅κ³Όλ˜λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

 

 

λ°˜μ‘ν˜•

'κ°œμΈκ³΅λΆ€ > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Level 2] μ••μΆ•  (0) 2021.05.25
[Level 2] μ˜¬λ°”λ₯Έ κ΄„ν˜Έ  (0) 2021.05.24
[Level 2] λ‹€μŒ 큰 숫자  (0) 2021.05.22
[Level 2] λ•…λ”°λ¨ΉκΈ°  (0) 2021.05.21
[Level 2] 숫자의 ν‘œν˜„  (0) 2021.05.20

λŒ“κΈ€