-
[Programmers/Level1] 수박수박수박수박수박수?Programmers/코딩테스트 풀이 2022. 2. 3. 20:03
프로그래머스 / level1 / Java / 수박수박수박수박수박수?
문제 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. public class replayPrintSolution { // 방법 1 : StringBuffer로 Return, 삼항 연산자로 즉시 append 시키는 방법 public StringBuffer solution(int n) { StringBuffer answer = new StringBuffer(); for(int i = 0 ; i < n ; i++){ answer.append(i % 2 == 0 ? "수" : "박"); } return answer; } // 방법 2 : StringBuffer로 Return, 삼항 연산자로 str 문자열을 append 시키는 방법 public StringBuffer solution(int n) { StringBuffer answer = new StringBuffer(); for(int i = 0 ; i < n ; i++){ String str = i % 2 == 0 ? "수" : "박"; answer.append(str); } return answer; } // 방법 3 : StringBuilder로 Return, 삼항 연산자로 즉시 append 시키는 방법 public StringBuilder solution(int n) { StringBuilder answer = new StringBuilder(); for(int i = 0 ; i < n ; i++){ answer.append(i % 2 == 0 ? "수" : "박"); } return answer; } // 방법 4 : String으로 Return, 삼항 연산자로 += 시키는 방법 public String solution(int n) { String answer = ""; for(int i = 0 ; i < n ; i++){ answer += i % 2 == 0 ? "수" : "박"; } return answer; } }
방법 1 결과 방법 2 결과 방법 3 결과 방법 4 결과 방법 1과 방법 2는 StringBuffer를, 방법 3는 StringBuilder를 이용하여 방법 4보다 훨씬 빠른 속도로 코드를 실행시킬 수 있다.
방법 1의 테스트 2는 방법 2의 테스트 2보다 느리지만, 방법1의 테스트 15는 방법 2의 테스트 15 보다 빠르게 실행된 것을 보아 두 방법의 속도 차이는 근소한 것으로 보인다.
앞으로 간결한 코드 길이를 위해 StringBuffer 사용 시 방법 1을 사용 할 예정이다.
방법 3는 StringBuilder를 사용한 방법인데, 동기화를 제공하지 않기 때문에 StringBuffer 사용보다 대체로 빨라진 코드 실행 속도를 확인 할 수 있다.
방법 4과 같이 String을 사용하면 StringBuffer나 StringBulider 사용보다 현저하게 속도가 느려지는 것을 확인 할 수 있었다.
StringBuilder는 동기화를 제공하지 않고, StringBuffer는 동기화를 제공하기 때문에
동기화가 필요하지 않은 경우에는 StringBuilder를 이용하여 코드 실행 속도를 좀 더 단축시킬 수 있다.
'Programmers > 코딩테스트 풀이' 카테고리의 다른 글
[Programmers / level1] 서울에서 김서방 찾기 (0) 2022.02.20 [Programmers/Level1] 제일 작은 수 제거하기 (0) 2022.02.10 [Programmers/Level1] 음양 더하기 (0) 2022.02.03 [Programmers/Level1] 없는 숫자 더하기 (0) 2022.01.27 [Programmers/Level1] 숫자 문자열과 영단어 (0) 2022.01.20