[programmers] Nμ§„μˆ˜ κ²Œμž„ - Java

'Nμ§„μˆ˜ κ²Œμž„' λ¬Έμ œλŠ” μ°Έκ°€μžλ“€μ΄ μˆœμ„œλŒ€λ‘œ 숫자λ₯Ό λ§ν•˜λŠ” κ²Œμž„μœΌλ‘œ, 주어진 진법, ꡬ할 숫자의 개수, μ°Έκ°€ 인원, 튜브의 μˆœμ„œμ— 따라 νŠœλΈŒκ°€ 말해야 ν•˜λŠ” 숫자λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜λŠ” 것이닀. 초기 μ½”λ“œλŠ” μ„±λŠ₯이 쒋지 μ•Šκ³  일뢀 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆμœΌλ‚˜, κ°œμ„ λœ μ½”λ“œμ—μ„œλŠ” StringBuilderλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κ³ , νŠœλΈŒκ°€ λ§ˆμ§€λ§‰ μ‚¬λžŒμΌ λ•Œ μ˜¬λ°”λ₯Έ 좜λ ₯을 보μž₯ν•˜κΈ° μœ„ν•œ 쑰건을 μΆ”κ°€ν•˜μ˜€λ‹€.
DriedPollack's avatar
Apr 16, 2024
[programmers] Nμ§„μˆ˜ κ²Œμž„ - Java

Nμ§„μˆ˜ κ²Œμž„

문제 μ„€λͺ…

νŠœλΈŒκ°€ ν™œλ™ν•˜λŠ” μ½”λ”© λ™μ•„λ¦¬μ—μ„œλŠ” μ „ν†΅μ μœΌλ‘œ ν•΄μ˜€λŠ” κ²Œμž„μ΄ μžˆλ‹€. 이 κ²Œμž„μ€ μ—¬λŸ¬ μ‚¬λžŒμ΄ λ‘₯κΈ€κ²Œ μ•‰μ•„μ„œ 숫자λ₯Ό ν•˜λ‚˜μ”© μ°¨λ‘€λŒ€λ‘œ λ§ν•˜λŠ” κ²Œμž„μΈλ°, κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.
  1. 숫자λ₯Ό 0λΆ€ν„° μ‹œμž‘ν•΄μ„œ μ°¨λ‘€λŒ€λ‘œ λ§ν•œλ‹€. 첫 번째 μ‚¬λžŒμ€ 0, 두 번째 μ‚¬λžŒμ€ 1, … μ—΄ 번째 μ‚¬λžŒμ€ 9λ₯Ό λ§ν•œλ‹€.
  1. 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 κ°€ 주어진닀.
  • 2 ≦ n β‰¦ 16
  • 0 < t β‰¦ 1000
  • 2 ≦ m β‰¦ 100
  • 1 ≦ p β‰¦ m

좜λ ₯ ν˜•μ‹

νŠœλΈŒκ°€ 말해야 ν•˜λŠ” 숫자 t개λ₯Ό 곡백 없이 μ°¨λ‘€λŒ€λ‘œ λ‚˜νƒ€λ‚Έ λ¬Έμžμ—΄. 단, 10~15λŠ” 각각 λŒ€λ¬Έμž A~F둜 좜λ ₯ν•œλ‹€.

μž…μΆœλ ₯ 예제

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

처음 μ‹œλ„ν•œ μ½”λ“œ

class Solution { public String solution(int n, int t, int m, int p) { String answer = ""; int cur = 1; int num = 0; while(answer.length()<t){ String str = Integer.toString(num, n).toUpperCase(); for(char c: str.toCharArray()){ if(answer.length()>=t){ return answer; } if(cur%m==p){ answer+=c; } cur++; } num++; } return answer; } }

κ°œμ„ ν•œ μ½”λ“œ

class Solution { public String solution(int n, int t, int m, int p) { StringBuilder answer = new StringBuilder(); int cur = 1; int num = 0; while(answer.length() < t){ String str = Integer.toString(num, n).toUpperCase(); for(char c: str.toCharArray()){ if(answer.length() >= t){ return answer.toString(); } if(cur % m == p || (cur % m == 0 && p == m)) { answer.append(c); } cur++; } num++; } return answer.toString(); } }
 

핡심 ν‚€μ›Œλ“œ

  • 처음 μ‹œλ„ν•œ μ½”λ“œλŠ” String에 κ³„μ†ν•΄μ„œ 합연산을 μ‚¬μš©ν•΄μ„œ μ„±λŠ₯이 쒋지 λͺ»ν–ˆκ³ , ν•΄λ‹Ήν•˜λŠ” 차둀인지 κ²€μ‚¬ν•˜λŠ” 쑰건이 μ˜¬λ°”λ₯΄μ§€ μ•Šμ•„ λͺ‡λͺ‡ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€.
  • 이λ₯Ό κ°œμ„ ν•΄μ„œ pκ°€ λ§ˆμ§€λ§‰ μ‚¬λžŒμΌ λ•Œ μ˜¬λ°”λ₯Έ 좜λ ₯을 보μž₯ν•˜κΈ° μœ„ν•΄ pκ°€ mκ³Ό 같은 경우λ₯Ό μ²˜λ¦¬ν•˜λŠ” 쑰건을 μΆ”κ°€ν•˜κ³ , StringBuilderλ₯Ό μ‚¬μš©ν•΄μ„œ μ½”λ“œλ₯Ό μ΅œμ ν™”ν–ˆλ‹€.
 

κ²°λ‘ !

ν•΄λ‹Ή 문제λ₯Ό ν’€λ©΄μ„œ Javaμ—μ„œμ˜ λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ” 방법을 μ—°μŠ΅ν•  수 μžˆμ—ˆλ‹€.
 
Share article

More articles

See more posts

πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog