일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 2504 괄호의값 자바
- 백준 1806 자바
- 백준 괄호의값 자바
- 백준 1700 자바
- 웹 기술면접
- 개발일지
- 백준 1193
- 인사관리사이트
- 팀프로젝트
- 조인종류
- 백준 최소비용구하기 자바
- 프로그래머스
- Spring Security
- 유니온 파인드
- 백준 멀티탭스케줄링 자바
- 기업분석
- 자바 2869
- 줄세우기 위상정렬
- 커머스기사
- 데이터베이스 기초지식
- 백준 줄세우기 자바
- 다익스트라 최소비용구하기
- 이커머스
- Union Find
- 자바 1193
- 라이브커머스
- 1062번 가르침
- 괄호의값 스택
- 백준 2252 자바
- 온라인쇼핑
Archives
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 2504 괄호의값 자바
- 백준 1806 자바
- 백준 괄호의값 자바
- 백준 1700 자바
- 웹 기술면접
- 개발일지
- 백준 1193
- 인사관리사이트
- 팀프로젝트
- 조인종류
- 백준 최소비용구하기 자바
- 프로그래머스
- Spring Security
- 유니온 파인드
- 백준 멀티탭스케줄링 자바
- 기업분석
- 자바 2869
- 줄세우기 위상정렬
- 커머스기사
- 데이터베이스 기초지식
- 백준 줄세우기 자바
- 다익스트라 최소비용구하기
- 이커머스
- Union Find
- 자바 1193
- 라이브커머스
- 1062번 가르침
- 괄호의값 스택
- 백준 2252 자바
- 온라인쇼핑
Archives
- Today
- Total
JumpUp
백준 [N2438 - 별찍기1], [N2442 - 별찍기5] 본문
구현문제
별찍기 - 1 (오류1 - 메모리 초과)
String 객체는 immutable(객체가 한 번 할당되면, 해당 객체의 참조를 변경할 수도, 내부의 상태를 수정할 수도 없는 것이다.)하기 때문에 += 을 할 때마다 기존의 내용을 모두 복사해서 새로운 객체를 만들고, 그 뒤에 문자열을 이어붙여야 합니다. 기존의 객체는 쓸모가 없어지므로 버려져야 하는데 이게 메모리에서 실제로 해제되기까지는 시간이 걸리는 것으로 보입니다. 설령 메모리 문제가 해결된다고 하더라도 시간 초과가 뜰 것입니다.
String 대신에 StringBuilder를 사용하면 잘 통과됩니다.
출처 : https://www.acmicpc.net/board/view/33919
String star = "*";
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
output += star;
}
bw.write(output+"\n");
}
Solution
StringBuilder sb = new StringBuilder();
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
sb.append("*");
}
sb.append("\n");
}
별찍기 -2 (문제이해)
위와 같이 별이 마지막으로 찍힌 뒤에는 다음 줄로 넘어간다.
(하지만,,별이 마지막으로 찍힌 뒤에도 마지막 줄 별의 수 만큼 공백을 채워준다고 생각했다. 그래서 이중포문에 break를 걸어 다음줄로 넘어가도록 했다)
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
StringBuilder sb = new StringBuilder();
for(int i=n-1;i>=0;i--){
for(int j=1;j<=n*2-1;j++){
if(j>=n*2-i) break;
if(j<=i) sb.append(" ");
else sb.append("*");
}
sb.append("\n");
}
System.out.print(sb);
}
}
문제를 바르게 이해한 후 직관적으로 수정한 코드는 아래와 같다.
Solution
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
StringBuilder sb = new StringBuilder();
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
sb.append(" ");
}
for(int j=0;j<i*2-1;j++){
sb.append("*");
}
sb.append("\n");
}
System.out.print(sb);
}
}
728x90
'알고리즘' 카테고리의 다른 글
백준 [N1697 - 숨바꼭질] (0) | 2021.11.17 |
---|---|
백준 [N2696 - 중앙값구하기] (0) | 2021.11.06 |
프로그래머스 [타겟넘버] (0) | 2021.10.18 |
프로그래머스 [N으로 표현]_DP (0) | 2021.10.04 |
MST알고리즘 - 크루스칼(Kruskal) (0) | 2021.09.27 |