코딩 테스트를 준비하면서 처음으로 프로그래머스 연습문제를 풀어보았다.
알고리즘 문제를 지금까지 한번도 풀어본적이 없어 이렇게 간단한 문제도 푸는데 거의 한시간이 걸렸다...
처음 답안
package programmers;
import java.util.Scanner;
public class Box {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String ar = "*";
String br = "*";
String re = "";
for(int k=0; k < a -1; k++) {
re += ar;
}
for(int i=0; i < b; i++) {
System.out.println(br + re);
}
}
}
풀면서도 이건 아닌것 같은데... 하면서 풀었는데 테스트 통과는 했다.
객체를 마구 생성해서 이어 붙이는식인데 부끄러운 답안이다....
다른분들 답안을 보니 StringBuilder 클래스와 append를 이용해서 간단하게 작성할 수 있다는걸 배웠다.
그런데 왜 StringBuilder를 써야할까?
"String 객체끼리 + 연산자를 이용하여 더하는것은 메모리 할당과 해제를 반복하게 되어 성능에 좋지않다."
라고 한다.
확실히 메모리 할당과 해제를 반복하게 되면 공간복잡도가 증가할테니 최적의 알고리즘은 아닐것이다.
StringBuilder 말고도 StringBuffer 클래스도 존재하는데 중복 점유를 방지하는 장치 때문에 StringBuilder보다 무거워서 일반적으로 StringBuilder를 사용한다고 한다.
다시 생각한 답안
package programmers;
import java.util.Scanner;
public class Box2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
StringBuilder sb = new StringBuilder();
for(int i=0; i<a; i++) {
sb.append("*");
}
for(int k=0; k<b; k++) {
System.out.println(sb.toString());
}
}
}
StringBuilder와 append를 이용해서 n값 만큼 가로 길이를 만들고 이를 m만큼 세로 길이로 만들었다.
람다를 이용해서 작성하신 분도 계시는데 자바의 정석을 본지 오래되서 람다가 기억이 잘 안난다...
코딩 테스트를 준비하면서 자바 공부도 다시 해야겠다.
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 행렬 테두리 회전하기 (0) | 2021.10.17 |
---|---|
(Java) 프로그래머스 더 맵게 (0) | 2021.10.17 |
(Java) 프로그래머스 기능 개발 (0) | 2021.10.17 |
(Java) 프로그래머스 로또의 최고순위와 최저순위 (0) | 2021.09.08 |
(Java) 프로그래머스 체육복 (0) | 2021.09.01 |