플로이드의 삼각형과 맞다ㅇ
아니 문제를 풀어보록 하자.
한자리수, 두자리수 앞에는 패딩을 넣어줘야 한다는데, 일단 패딩 없이 삼각형 먼저 출력시켜 보도록 하자. 별찍기 대신에 숫자를 출력하면 된다.
int num[] = new int[height * (height + 1) / 2];
for(int i = 0; i < num.length; i++){
num[i] = i + 1;
}
int idx = 0;
for(int i = 1; i <= height; i++){
for(int j = 1; j <= i; j++){
System.out.print(num[idx++] + " ");
}
System.out.println();
}
앞에서 했던 별찍기 코드를 살짝 고쳐줘서 여기까지는 쉽게 됐다. 그런데 패딩이 문제인데..... 왜 힌트까지 주면서 패딩이 가장 어려운 부분이라 한지 알거같다.
패딩이 무엇이냐, 출력하는 숫자의 최대값이 두자리라면, 한자리 수를 출력할 때 숫자 앞에 띄어쓰기를 한칸씩 해주는 거시다. 최대값이 세자리라면 한자리 수 앞에는 띄어쓰기 두칸, 두자리 수 앞에는 한칸씩.
숫자를 출력하는 안쪽 반복문에 조건문으로 숫자 최대값인 num.length가 한자리냐 두자리냐 세자리냐에 따라서 패딩을 얼마나 넣어주는지 설정해주면 되...지 않을라나
그것보단 먼저 현재 출력하는 num[idx]가 몇자리인지!!!
음 조건식만 잘 설정하면 될거같다. 조아쓰 일단 방금 한건 묻어버리고......
다시 조건을 나눠서, 일단 num.length의 자릿수에 따라서 경우를 나눠줬다. 한자리라면 굳이 앞에 패딩을 넣을 필요가 없고, 두자리라면 10보다 작을 때만 한칸 띄워줬다. 마지막으로 세자리일 때 10보다 작으면 두칸, 10과 100사이일 때 한칸 띄워주기. 코드로 작성하면 아래와 같다.
if(num.length >= 10 && num.length < 100){ //최대값이 10이상 100미만일 때
if(num[idx] < 10){ //출력하는 수가 10보다 작으면
System.out.print(" "); //앞에 한칸 띄우기
}
}
else if(num.length >= 100){ //최대값이 100보다 크면
if(num[idx] < 10){ //출력하는 수가 10보다 작으면
System.out.print(" "); //앞에 두칸 띄우기
}
else if(num[idx] >= 10 && num[idx] < 100){ //출력하는 수가 10이상 100미만이면
System.out.print(" "); //앞에 한칸 띄우기
}
}
그리고 결과는 두두둥
요거는 한번에 되서 기분이가 좋다 음핫핫
위에 한번 실패한건 차피 아이패드에 안적고 대충한거니까 안한걸로 칠거다 음핫핫핫
해설 보니까 String 썼던데... 지금은 보고 넘어갈랜다. String.valueOf 같은 함수들은 안배워서 모르니까......
그러고보니 나는 처음에 출력될 숫자들을 for문 안에서 인덱스를 어떻게 할줄 알고 배열로 만들었는데 돌아보니 인덱스는 ++만 해줘서 그냥 정수형 변수로 해도 됐던 거였네...... 메모리 낭비 오졌따
public class ShapePrinter {
public void printFloydsPyramid(int height) {
// 코드를 입력하세요.
int num = 1;
for(int i = 1; i <= height; i++){
for(int j = 1; j <= i; j++){
if(num >= 10 && num < 100){
if(num < 10){
System.out.print(" ");
}
}
else if(num >= 100){
if(num < 10){
System.out.print(" ");
}
else if(num >= 10 && num < 100){
System.out.print(" ");
}
}
System.out.print(num++ + " ");
}
System.out.println();
}
}
}
흠 훨씬 깔끔하군. 기분 좋았는데... 오늘도 비효율의 극치...!
어찌됐든 풀었으니 된거다(아님
'210525~220812' 카테고리의 다른 글
#21 final 210614 (0) | 2021.06.15 |
---|---|
#20 오늘 한것들 210613 (0) | 2021.06.13 |
#18 문제풀이1 210611 (0) | 2021.06.12 |
#17 this 210610 (0) | 2021.06.10 |
#16 생성자 210609 (0) | 2021.06.10 |