License Key Formatting
You are given a license key represented as a string S which only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.
Given a number K, we would want to reformat the strings such that each group contains exactly K characters, except for the first group which could be shorter than K, but still must contain at least one character. Furthermore, there must be a dash inserted between two groups and all lowercase letters should be converted to uppercase.
Given a non-empty string S and a number K, format the string according to the rules described above.
=>์ค์ง ์ํ๋ฒณ ์ฒ ์์ ๋์ฌ๋ก ์ด๋ฃจ์ด์ง String S๋ก ๋ํ๋ด์ง๋ ๋ผ์ด์ผ์ค ํค๊ฐ ์ฃผ์ด์ง๋ค. String์ N๊ฐ์ ๋์ฌ์ ์ํด N+1 ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฆฌ๋๋ค.
์ซ์ K๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ฐ๋ฆฌ๋ string์ ์ฌํ์ฑํ๊ณ ์ ํ๋ค. ๊ฐ๊ฐ์ ๊ทธ๋ฃน์ ์ ํํ K๊ฐ์ character๋ฅผ ํฌํจํ๊ณ , K๋ณด๋ค ์์ ์๋ ์๋ ์ฒซ๋ฒ์งธ ๊ทธ๋ฃน์ ์ ์ธํ๊ณ ์ต์ํ 1๊ฐ์ character๋ฅผ ํฌํจํด์ผํ๋ค. ๊ฒ๋ค๊ฐ, ๋ ๊ฐ์ ๊ทธ๋ฃน ์ฌ์ด์ ๋์ฌ๊ฐ ์ฝ์ ๋์ด์ผ ํ๊ณ ๋ชจ๋ ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ณํ๋์ด์ผ ํ๋ค.
Example 1 : Input : S = "5F3Z-2e-9-2", K = 4 Output : "5F3Z-2E92"
Example 2 : Input : S = "2-5g-3-J",K = 2 Output : "2-5G-3J"
์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ : StringBuilder =>String : String์ +์ฐ์ฐ์ด๋ concat์ ์ฌ์ฉํ๋ฉด ์๋ก์ด String ๊ฐ์ฒด๋ฅผ new๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ด๋ค. =>StringBuffer : ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ(Synchronized) =>StringBuilder : ์ฑ๊ธ์ค๋ ๋ ํ๊ฒฝ์์ ๋น๋๊ธฐํ(Asynchronized). Append ๋ฑ ์ฐ์ฐ์ ์์ ์์ฌ๋ก ์ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์๊ณ ๋ฆฌ์ฆ 1. ์๋ String์์ ๋์ฌ(-)์ ๊ฑฐํ๋ค. - replace(char oldChar, char newChar) 2. ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ฐ๊พผ๋ค. - toUpperCase 3. ๋ค์์๋ถํฐ ์นด์ดํ ํ๋ค! - for(int i=k; i < leng; i = i+k)
=>๋ ์ง๊ด์ ์ผ๋ก
์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ input String์์ ๋์ฌ ์ ๊ฑฐ, ๋๋ฌธ์ ๋ณํํ๋ค.
StringBuilder ์์ฑํ์ฌ 1์์ ์์ฑํ String ๋ฐ์ดํฐ ์ถ๊ฐํ๋ค.
StringBuilder์ ๋ค์์๋ถํฐ K๋งํผ ๋์ด ๋์ฌ ์ถ๊ฐํ๋ค. //insert(int,'-');
StringBuilder๋ฅผ String์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ค.
์๊ณ ๋ฆฌ์ฆ์ java ์ธ์ด๋ก ๊ตฌํ #1.(ํ๋ฆผ)
class LicenseKeyFormatting {
public static void main(String[] args) {
String S = "5F3z-2e-9-w";
int K = 4;
System.out.println(solve(S,K));
}
public static StringBuilder solve(String s, int K) {
StringBuilder sb = new StringBuilder();
//String์ StringBuilder๋ก ๋ณํํ์ฌ ๋ณต์ฌ.
int leng = s.length();//๋ฌธ์์ด์ .length(), ๋ฐฐ์ด์ .length
for(int i = 0; i<leng;i++) {
sb.append(s.charAt[i]);
}
//1.๋์ฌ ์ ๊ฑฐ
for(int i=0;i<sb.size();i++) {
sb.replace('-','');
}
//2.์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ฐ๊พผ๋ค.
sb = sb.toUpperCase();
//3.๋ค์์๋ถํฐ ์นด์ดํ
ํ๊ณ , ๋์ฌ ์ถ๊ฐํ๋ค!
for(int i=k; i<leng;i=i+k) {
sb.insert(K-i,"-");
}
return sb;
}
}
์๊ณ ๋ฆฌ์ฆ์ java ์ธ์ด๋ก ๊ตฌํ #2.(์ ๋ต)
class LicenseKeyFormatting {
public static void main(String[] args) {
String S = "5F3z-2e-9-w";
int K = 4;
System.out.println(solve(S,K));
}
public static String solve(String s, int K) {
//1.์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ input String์์ ๋์ฌ ์ ๊ฑฐ, ๋๋ฌธ์ ๋ณํํ๋ค.
String S2 = s.replace("-","");//String์ character๋ก ์ด๋ฃจ์ด์ ธ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ char๋ ' '๋ผ ์๊ฐํ์ง๋ง ์ค๋ต. ๊ทธ๋์ ""
S2 = S2.toUpperCase();
//2.StringBuilder ์์ฑํ์ฌ 1์์ ์์ฑํ String ๋ฐ์ดํฐ ์ถ๊ฐํ๋ค.
StringBuilder sb = new StringBuilder();
for(int i=0;i<S2.length();i++) {
sb.append(S2.charAt(i));
}
//3.StringBuilder์ ๋ค์์๋ถํฐ K๋งํผ ๋์ด ๋์ฌ ์ถ๊ฐํ๋ค. insert(int,'-');
int leng = sb.toString().length();
for(int i=k; i<leng;i=i+k) {
sb.insert(leng-i,'-');
}
//4.StringBuilder๋ฅผ String์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ค.
return sb.toString();
}
}
์ ๋ต :
class LicenseKeyFormatting {
public static void main(String[] args) {
String S = "5F3z-2e-9-w";
int K = 4;
System.out.println(solve(S,K));
}
public static String solve(String s, int K) {
//1.input String์ ๋์ฌ ์ ๊ฑฐ - StringBuilder๊ฐ ์๋๋ผ input String์์ ๋์ฌ์ ๊ฑฐ, ๋๋ฌธ์ ๋ณํํ๋ค!
String s2 = s.replace("-","");
//2.input String ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ฐ๊พผ๋ค.
S2 = S2.toUpperCase();
//3.๋ค์์๋ถํฐ ์นด์ดํ
ํ๊ณ , ๋์ฌ ์ถ๊ฐํ๋ค!
//StringBuilder ์์ฑ, ๋ฐ์ดํฐ ๋ณต์ฌ
StringBuilder sb = new StringBuilder();
for(int i = 0; i<s.length();i++) {//๋ฌธ์์ด์ .length(), ๋ฐฐ์ด์ .length
sb.append(s.charAt[i]);
}
int len = sb.toString().length();
for(int i=k; i<len;i=i+k) {
sb.insert(len-i,'-');
}
return sb.toString();
}
}
Last updated
Was this helpful?