5번과 6번은 if else문을 최대한 안쓰고 만들어 봤습니다.
5번부터는 3중 이상 포문과 if, else를 쓰고 시간을 단축시켜 구현할 수 있었지만
코딩테스트도 연습할겸 2중 포문을 쓰고 최대한 코딩길이도 줄이는 방법을 택했습니다.
2중 포문을 사용하는 수많은 방법 중 내 머리를 쥐어짜 최대한 짤 수 있는만큼 짜봤습니다...
이번 교육때 배운 연산자중에 삼항연산자를 쓰게 되었고 조건문 수식에 대한 여러 방법들을 알게 되었습니다.
아직 시간복잡도의 개념을 확실하게 알진 못하지만 별찍기를 바탕으로 실력을 늘릴 수 있게 하려고 합니다. ㅎㅎ
// 1번
for(int i = 0;i<3;i++) { // i = 행 i가 증가함에 따라 행 증가
for(int j=0;j<4;j++) { // j = 열( * 출력)
System.out.print('*'); //j값이 증가함에 따라 열에 *출력
}
System.out.println();
}
// 2번
for(int i = 1;i<=3;i++) { // i = 행 i가 증가함에 따라 행 증가
for(int j=1;j<=i;j++) { // i가 증가함에 따라 *의 출력도 같이 됨.
System.out.print('*');
}
System.out.println();
}
// 3번 3중 포문
for(int i = 1;i<=3;i++) { // i = 행, i가 증가함에 따라 행 증가
for(int j=i;j<3;j++) { // j = 열, i = 1일때 공백은 2개 출력됨
// j의 초기값은 i의 회전마다 변해야 공백이 감소되므로 i를 대입
System.out.print(' ');
}
for(int k=0;k<i;k++) {
// 변수를 하나 더 써서 k반복문에 공백 다음 *을 출력
// k는 i의 회전수 마다 *을 출력하게 되므로 최대값을 i와 맞춤
System.out.print('*');
}
System.out.println();
}
// 4번 3중 포문
for(int i = 0;i<=2;i++) { // 최대 행은 3
for(int j=i;j<2;j++) { // 공백을 먼저 출력하기 위해 3번과 같이 조건을 맞춤
System.out.print(' ');
}
for(int k=2-i;k<=2+i;k++) {
// 기준 열 감소(최소)와 기준 열 증가(최대)를 해서 *의 출력을 늘림
System.out.print('*');
}
System.out.println();
}
// 4번 2중 포문
for(int i=0;i<3;i++) { // 최대 행은 3
for(int j=0;j<=2+i;j++) { // i가 증가함에 따라 출력열 j 최대값이 증가
System.out.print((j+i<2)? ' ' : '*');
// 삼항연산자를 이용해 참이면 j의 최대 회전수 만큼 공백을 먼저출력
// 거짓이면 *을 출력하게 조건문 설정
}
System.out.println();
}
// 5번 for 2개로 해보기
for(int i=0,d=0;i<5;i++) { // i = 최대 행 (전체 회전 수 : 5줄)
// d = 스위치 조건문 변화를 주기위한 변수
// int d = 0;
for(int j=0;j<3+d;j++) {
// i = 0일때 '' '' '*' 3번의 출력을 시작해야함으로 회전수는 3으로 조건문 설정
// d라는 스위치 변수를 설정해 최대 회전수 5와 스위치 조건문을 통해 다시 3으로 감소할 수 있는 장치
// i = 2일때 j 회전에서 최대 수 5번 출력을하고
// i = 3일때 j 회전 수 4로 감소함
System.out.print((j<2-d)? ' ' : '*');
// 삼항 연산자를 통해 i의 줄 마다 ' '과 *을 출력하도록 작성
}
if(i<2) { // 스위치 조건문 i가 3이 될때 j의 회전 수 4로 감소시키기 위한 장치
d++; // i<2를 만족시킬 시 다이아몬드 모양이 맞춰지게 d를 증가시켜 j의 회전수를 조정
}
else {
d--;// i<2 i가 2를 넘어갈 시 다이아몬드 모양이 맞춰지게 d를 감소시켜 i=3부터 j의 회전수를 조정
}
System.out.println(); // 다음 행
}
//i j j+d d
//0 0 1 2 3 0
//1 0 1 2 3 4 1
//2 0 1 2 3 4 5 2
//3 0 1 2 3 4 1
//4 0 1 2 3 0
// 6번 입력받기 for 2개와 삼항연산자 그리고 조건문
int num;
Scanner sc = new Scanner(System.in);
System.out.print("출력할 다이아몬드 높이 입력(홀수만) : ");
num = sc.nextInt();
for(int i=0,d=0;i<num;i++) { // num = 최대 출력 회전 수 (전체 회전 수 : num값)
// d = 스위치 조건문 변화를 주기위한 변수
// int d=0;을 여기다 선언하면 d의 값은 계속 0으로 초기화 돼서 제값을 출력못함.
for(int j=0;j<(num/2)+1+d;j++) {
// 출력되는 공백과 '*'이 감소되는 최대 회전 수
System.out.print((j<(num/2)-d)? ' ' : '*');
// j가 증가함에 따라 열에 나타내는 문자를 출력
}
if(i<(num/2)) { // 현재 회전 수와 열의 개수가 증가에서 감소되는 반환점을 비교
d++; // 조건이 참이면 최대 출력 문자를 나타낼 스위치 변수의 값 증가
}
else {
d--; // 조건이 거짓이면 최대 출력 문자를 나타낼 스위치 변수의 값 감소
}
System.out.println();
}
주석 없는 코드
// 1번
for(int i = 0;i<3;i++) {
for(int j=0;j<4;j++) {
System.out.print('*');
}
System.out.println();
}
// 2번
for(int i = 1;i<=3;i++) {
for(int j=1;j<=i;j++) {
System.out.print('*');
}
System.out.println();
}
// 3번 3중 포문
for(int i = 1;i<=3;i++) {
for(int j=i;j<3;j++) {
System.out.print(' ');
}
for(int k=0;k<i;k++) {
System.out.print('*');
}
System.out.println();
}
// 4번 3중 포문
for(int i = 0;i<=2;i++) {
for(int j=i;j<2;j++) {
System.out.print(' ');
}
for(int k=2-i;k<=2+i;k++) {
System.out.print('*');
}
System.out.println();
}
// 4번 2중 포문
for(int i=0;i<3;i++) {
for(int j=0;j<=2+i;j++) {
System.out.print((j+i<2)? ' ' : '*');
}
System.out.println();
}
// 5번 for 2개로 해보기
for(int i=0,d=0;i<5;i++) {
for(int j=0;j<3+d;j++) {
System.out.print((j<2-d)? ' ' : '*');
}
if(i<2) {
d++;
}
else {
d--;
}
System.out.println();
}
// 6번 for 2개와 삼항연산자 그리고 조건문
int num;
Scanner sc = new Scanner(System.in);
System.out.print("출력할 다이아몬드 높이 입력(홀수만) : ");
num = sc.nextInt();
for(int i=0,d=0;i<num;i++) {
for(int j=0;j<(num/2)+1+d;j++) {
System.out.print((j<(num/2)-d)? ' ' : '*');
}
if(i<(num/2)) {
d++;
}
else {
d--;
}
System.out.println();
}
반응형
'자바과정 > 과제물' 카테고리의 다른 글
(Java) 성적처리프로그램(3차원 배열사용) (0) | 2021.02.02 |
---|---|
(Java) stack과 heap (0) | 2021.01.30 |
(Java) static method에서 this를 사용할 수 없는 이유 (0) | 2021.01.29 |
(Java) 연산자 (operator) (0) | 2021.01.28 |
(Java) 이클립스 단축키 (0) | 2021.01.28 |
댓글