[18/07/03] 프로그래머스- Level 1 수박수박수박수박수박수?
수박수박수박수박수박수?
길이가 n이고, 수박수박수박수....
와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박
을 리턴하고 3이라면 수박수
를 리턴하면 됩니다.
제한 조건
- n은 길이 10,000이하인 자연수입니다.
입출력 예
n | return |
---|---|
3 | 수박수 |
4 | 수박수박 |
class Solution {
public String solution(int n) {
String a = "수";
String b = "박";
StringBuilder answer = new StringBuilder();
int sNum = n/2;
int bNum = n - sNum;
if (bNum>sNum) {
sNum = sNum + 1;
bNum = bNum - 1;
}
for (int i = 1; i <= n; i++) {
if (sNum != 0) {
answer.append(a);
sNum--;
}
if (bNum != 0) {
answer.append(b);
bNum--;
}
}
return answer.toString();
}
}
'수'와 '박'을 출력할 sNum과 bNum을 구하는게 제일 어려웠다. 등차수열이긴한데 뭔가 특이했다. 그래서 중간에 bNum>sNum 일때 각 값을 보정해주어 for에 반복 시켰다. StringBuilder를 안썼을때는 90ms정도 걸렸는데 Intelli J의 제안으로 StringBuilder를 쓰니 1~3ms로 엄청빨라졌다. 아마 += 연산자 때문이 아닌가 싶기도 하다. append나 concat등을 이용해봐야겠다.
배운점
StringBuilder, Math.ceil(올림)
공부할 것
StringBuilder, Math.ceil(올림)
코딩테스트때 효율성 검사나 시간초과 문제를 피하기 위해 StringBuilder, StringBuffer나 static 등을 학습해야겠다.
코딩테스트때 효율성 검사나 시간초과 문제를 피하기 위해 StringBuilder, StringBuffer나 static 등을 학습해야겠다.
P.S.
class Solution {
public String solution(int n) {
StringBuilder answer = new StringBuilder();
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
answer.append("수");
} else {
answer.append("박");
}
}
return answer.toString();
}
}
StringBuilder를 학습하고 다음과 같이 간단하게 알고리즘을 구현할 수 있었다. 리팩토링의 힘이란.....!!!
'Get IT Note > 알고리즘' 카테고리의 다른 글
[18/07/05] 프로그래머스- Level 1 시저암호 (0) | 2018.07.05 |
---|---|
[18/07/05] 프로그래머스- Level 1 문자열을 정수로 바꾸기 (0) | 2018.07.05 |
[18/07/03] 프로그래머스- Level 1 서울에서 김서방 찾기 (0) | 2018.07.03 |
[18/07/03] 프로그래머스- Level 1 문자열 내 p와 y의 개수 (0) | 2018.07.03 |
[18/07/02] 프로그래머스- Level 1 문자열 다루기 기본 (0) | 2018.07.03 |