📌 https://www.acmicpc.net/problem/2439
✅ Pre-Refactor Code
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int a = Integer.parseInt(br.readLine());
for (int i = 1; i<=a; i++){
for (int j = a; j>=1; j--){
if (i>=j) sb.append("*");
else sb.append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
🤔 개선해야 할 부분
조건문은 성능에 영향을 줄 수 있는 연산으로, 반복문 안에서 매번 조건을 평가하는 것은 비효율적입니다.
for문 안에 조건문을 사용하여 매번 i와 j를 비교하는 작업이 필요했습니다. 조건문을 많이 사용하면 그만큼 프로그램이 더 많은 연산을 수행하게 되어, 성능에 부정적인 영향을 줄 수 있습니다.
특히, 입력 값 a가 커질수록 조건문 실행이 많아지면서 성능 저하가 눈에 띌 수 있습니다.
🔄️ Refactored Code
💡 조건문 대체하기!
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int a = Integer.parseInt(br.readLine());
for (int i = 1; i<=a; i++){
// for (int j = a; j>=1; j--){
// if (i>=j) sb.append("*");
// else sb.append(" ");
// }
for(int j=a; j>i; j--){
sb.append(" ");
}
for(int j=1; j<=i; j++){
sb.append("*");
}
sb.append("\n");
}
System.out.println(sb);
}
}
if-else 조건문을 없애고 두 개의 반복문으로 나누었습니다.
첫 번째 반복문에서 공백을, 두 번째 반복문에서 별을 출력하도록 하여 불필요한 조건 검사를 제거했습니다.
이로 인해 연산 비용이 감소하고, 성능이 개선될 수 있습니다.
🔥 깨달은 점
작은 조건문 하나라도 성능과 가독성에 영향을 줄 수 있음을 이번 문제 풀이를 통해 알 수 있었습니다.
코드를 작성할 때는 항상 최적의 성능과 유지보수성을 고려하여 작성하는 것이 중요하다는 걸 느꼈고, 불필요한 연산을 제거하고 간결한 구조를 추구하는 개발자가 되어야겠다고 생각했습니다!
더보기
🙏🏻 gitlize
'코딩 테스트 일지 📒' 카테고리의 다른 글
[코테/JAVA] 문자, 문자열 다루기 완벽 가이드: 이 글 하나로 한번에 끝내자! 🔥 (9) | 2024.09.22 |
---|---|
[코테/JAVA] 배열 & 리스트 완벽 가이드: 이 글 하나로 한번에 끝내자 🔥 (1) | 2024.09.21 |
[백준] 2438 별 찍기 - 1 | 구현 | 브론즈 Ⅴ | JAVA 💡StringBuilder 사용 (0) | 2024.09.16 |
[코드업/JAVA] 기초 100제 완료 후기! 🎉 (0) | 2024.08.26 |
[코드업/JAVA] 기초 100제 8. 1차원배열&2차원배열 1093-1099 🐘 (2) | 2024.08.26 |