프로그래밍/알고리즘 문제풀이
codewar: Errors: histogram
noveljava
2019. 6. 21. 11:03
문제
- https://www.codewars.com/kata/errors-histogram/
Codewars: Train your coding skills
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.
www.codewars.com
문제 풀이
- 주어진 String에서 예외 문자의 개수를 count하는 문제입니다.
- given a string will output the errors as a string representing a histogram of the encountered errors.
- 그렇기에 문자를 순회하면서, Error의 개수를 Count하고, Format에 맞게끔 출력을 시켜주면 됩니다.
- 출력의 양식은 다음과 같습니다.
- "%-3c%-6d[*로 갯수 표현]\r"
- %-3c를 통해서, 에러의 문자를 포함하여 2개의 공백을 유지합니다.
- %-6d를 통해서, 에러의 갯수와 함께 고정된 공백을 유지합니다. ( 숫자가 1자리라면 공백 5, 2자리라면 공백 4 )
- 그리고, 나머지는 * 로 채워주게 됩니다.
- 위의 방법이 아니라, 저는 For문으로 Format 양식을 맞춰두었습니다.
class Hist {
public static String hist(String s) {
String result = "";
int hitsArray[] = {0, 0, 0, 0};
for(char c : s.toCharArray()) {
switch(c) {
case 'u':
hitsArray[0]++; break;
case 'w':
hitsArray[1]++; break;
case 'x':
hitsArray[2]++; break;
case 'z':
hitsArray[3]++; break;
default:
break;
}
}
for(int i=0; i<4; i++)
{
String rowInfo = "";
if( 0 == hitsArray[i]) {
continue;
}
switch(i) {
case 0:
rowInfo += "u "; break;
case 1:
rowInfo += "w "; break;
case 2:
rowInfo += "x "; break;
case 3:
rowInfo += "z "; break;
default:
break;
}
rowInfo = rowInfo + Integer.toString(hitsArray[i]);
for(int j=0; j<6-(Integer.toString(hitsArray[i]).length()); j++)
{
rowInfo += " ";
}
for(int j=0; j<hitsArray[i]; j++)
{
rowInfo += "*";
}
rowInfo += "\r";
result += rowInfo;
}
if ("" != result)
{
result = result.substring(0, result.length()-1);
}
return result;
}
}