본문 바로가기

JAVA

< (JAVA) 코드업 1071 ~ 1080 >

 

 

 

 

 

 

 

 

 

 

안녕하세요! 

 

JAVA를 이용하여 코드업 문제 1071번 ~ 1080번 까지를 풀어보았습니

 

 

 

 

 

 

 

 

 

 

1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기1

 

< 문제 설명 >

- 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.

- 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다.


 < 참고 >
-  goto 명령문을 사용하면 간단한 반복 실행을 만들 수 있다. 반복 실행 부분을 빠져나오기 위해(즉 무한 반복을 방지하기 위해) 반복 실행 되는 도중에 조건을 검사해야 한다.

- goto 이름:
이 명령은 이름: 이 작성된 곳으로 프로그램의 실행 흐름을 바꾸어 준다.

- "이름:" 과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블)라고 한다. 레이블은 특별한 선언 없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면 된다. 레이블은 한 단어처럼 공백없이 모두 붙여 써야 한다.

- switch( ) ... case ... : ... break; 에서 case ... : 도 일종의 레이블이라고 생각할 수 있다.

- goto 레이블:
명령을 사용하면 반복되는 부분을 여러 개 자유롭게 만들 수 있다.

- goto 명령은 반복 실행을 만들어낼 수 있는 가장 간단한 명령이지만, 복잡하게(스파게티 코드) 사용하는 경우, 이해가 어렵고 오류가 생기기 쉽다.

 

< 예시 >

-  int n;
reload: //레이블은 콜론(:)으로 끝내고, 일반적으로 들여쓰기를 하지 않는다.
  scanf("%d", &n);
  printf("%d", n);
  if(n!=0) goto reload; //reload라고 적혀있는 레이블로 실행 이동

 

 

- 입력 : 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.

ex ) 7 4 2 3 0 1 5 6 9 10 8

- 출력 : 입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다. (0은 출력하지 않는다.)

ex ) 7

       4

       2

       3

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true){
            int a = sc.nextInt();

            if (a == 0)
                break;
            System.out.println(a);
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

 

 

1072 : [기초-반복실행구조] 정수 입력받아 계속 출력하기

 

< 문제 설명 >

- n개의 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 n의 최대 개수는 알 수 없다.

- n개의 입력된 정수를 순서대로 출력해보자.

- while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다.

 

< 예시 >

- int n, m;
  scanf("%d", &n);
reget: //레이블은 콜론( : ) 으로 끝난다.
  scanf("%d", &m);
  printf("%d\n", m);
  if(n-- != 0) goto reget; //reget:으로 이동, n의 값 1만큼 감소

 

 

- 입력 : 첫 줄에 정수의 개수 n이 입력되고, 두 번째 줄에 n개의 정수가 공백을 두고 입력된다. -2147483648 ~ +2147483647, 단 n의 최대 개수는 알 수 없다.

ex ) 5

       1 2 3 4 5

- 출력 : n개의 정수를 한 개씩 줄을 바꿔 출력한다.

ex ) 1

       2

       3

       4       

       5

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int arr[] = new int[n];

        for (int i = 0; i < n; i++)
            arr[i] = sc.nextInt();

        for (int i = 0; i < n; i++)
            System.out.println(arr[i]);

    }
}

 

완성된 코드

 

 

저는 사실 여기서부터 조금 어려워지기 시작했는데요 ,, ㅜㅜ

 

 

방법은

 

우선 n의 크기로 배열을 정의하고 n개의 값들을 하나씩 배열에 할당합니다.

반복문을 통해서 배열에 담긴 것들을 하나씩 출력하는 방식으로 코드를 짜보았습니다.

 

 

 

 

 

 

 

1073 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기2

 

< 문제 설명 >

- 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.

- 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.

 

< 참고 >

- if(조건)
{ //코드블록
  ...;
}
구조를 사용하면 주어진 조건이 참인 경우만 코드블록 부분이 실행된다.

비슷하게 어떤 조건에 따라 반복적으로 실행시킬 때에는 if를 while로 바꾸기만 하면

while(조건)
{ //코드블록
  ...;
}

와 같은 방법으로 코드블록의 내용을 반복적으로 수행시킬 수 있다.

- 수행되는 과정은
1. 먼저 조건을 검사한다.
2. 코드블록을 실행한다.
3. 다시 조건을 검사한다.
4. 코드블록을 실행한다.
...

와 같이 주어진 조건이 참인 동안 계속적으로 반복 실행한다.

 

- 이렇게 while(조건){...}을 이용하면 goto 명령을 사용하지 않고 반복을 만들어낼 수 있다.

 

< 예시 >

- int n=1; //처음 조건 검사를 넘어가기 위해 0이 아닌 값 입력
while(n!=0)
{
  scanf("%d", &n);
  printf("%d", n);
}

 

 

- 입력 : 정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.

ex ) 7 4 2 3 0 1 5 6 9 10 8

- 출력 : 입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다. (0은 출력하지 않는다.)

ex ) 7

       4

       2

       3

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true){
            int n = sc.nextInt();

            if (n == 0){
                break;
            }
            else{
                System.out.println(n);
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1074 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기1

 

< 문제 설명 >

- 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.

- while(조건)
{
  ...
}
구조를 사용하자.

 

< 예시 >

- int n;
scanf("%d", &n);
while(n!=0)
{
  printf("%d", n);
  n=n-1; //n--;와 같다.
}

 

 

- 입력 : 정수 1개가 입력된다. (1 ~ 100)

ex ) 5

- 출력 : 1씩 줄이면서 한 줄에 하나씩 1이 될 때까지 출력한다.

ex ) 5 4 3 2 1

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        for (int i = a; i > 0; i--) {
            System.out.println(i);
        }
    }
}

 

완성된 코드

 

 

저는 여기서 우선 정수 하나를 입력받아온 후 반복문을 사용하여 그 수로부터 1씩 감소하게 만든 후 값을 출력하도록 하였습니다!

 

 

 

 

 

 

 

1075 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기2

 

< 문제 설명 >

- 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.

 

< 예시 >

- int n;
scanf("%d", &n);
while(n!=0)
{
  n=n-1; //n--; 와 같다.
  printf("%d", n);
}

 

 

- 입력 : 정수 1개가 입력된다. (1 ~ 100)

ex ) 5

- 출력 : 1씩 줄이면서 한 줄에 하나씩 0이 될 때까지 출력한다.

ex ) 4

       3

       2

       1

       0

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        while (true) {
            a--;
            System.out.println(a);

            if (a == 0)
                break;
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1076 : [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기

 

< 문제 설명 >

-  영문자(a ~ z) 1개가 입력되었을 때 그 문자까지의 알파벳을 순서대로 출력해보자.

 

< 참고 >
- do
{ //코드블록
  ...
}while(조건); //do~while( ) ; 구조는 반드시 마지막에 세미콜론(;)을 붙여야 한다.
구조를 사용하자.

do
{ //코드블록
  ...
}while(조건);
구조는 while( ) { ... } 과 유사한 반복 실행 구조를 만들 수 있는데 다른 점은 무조건 한 번은 실행된다는 것이다. 마지막에 세미콜론을 반드시 붙여야 한다.

 

- * 복합 대입 연산자에 대해... 컴퓨터의 세상에서 반복되는 것은 다시 쓰기 귀찮다. 즉, 어딘가에 정의가 되어있다면 재사용하던가, 아니면 보다 간단히 쓰고 싶어한다.

- 복합 대입 연산자는 대입 연산자를 함께 사용해 보다 간단히 표현하는 방법이다. 예를 들어 어떤 연산자 X와 대입 연산자를 합쳐 "X="라고 표현하면, 이는 X 연산 후 대입하라는 의미를 간단히 나타내는 것이다.

- +=, -=, *=, /=, %= ... 등의 형태들이 모두 가능하며 의미는 아래와 같다.
예를 들어

n = n + 3;

n += 3; 으로 간단히 표현할 수 있다.

n = n << 1;

n <<= 1; 로 간단히 표현할 수 있다.

아래는 서로 다른 형태이지만 같은 기능을 하는 코드들이다.
n++;
n=n+1;
n+=1;

 

< 예시 >

- char x, t='a';
scanf("%c", &x);
do
{
  printf("%c ", t);
  t+=1; //t+=1; 는 t=t+1과 같은 의미이다.
}while(t<'z'+1); //의미 : t의 값이 'z'보다 작은 동안 반복된다.

 

 

- 입력 : 영문자 1개가 입력된다. (a ~ z)

ex ) f

- 출력 : a부터 입력한 문자까지 순서대로 공백을 두고 출력한다.

ex ) a b c d e f

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        char a = sc.nextLine().charAt(0);

        for (char i = 'a'; i <= a; i++) {
            System.out.println(i);
        }
    }
}

 

완성된 코드

 

 

 

 

 

1077 : [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기

 

< 문제 설명 >

- 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.

for((반복전 실행/준비 내용); (조건 검사 내용); (한번 실행한 후 처리할 작업))
{ //코드블록
  ...
}
반복 구조를 사용하자.

 

< 참고 >
- for((반복전 실행/준비내용); (조건 검사 내용); (한번 실행한 후 처리할 작업))
{ //코드블록
  ...
}
구조는 while( ) {...}, do {...} while( ); 구조와 같이 어떤 작업을 반복적으로 수행할 때 가장 일반적으로 많이 사용하는 구조이다.

- while( ) {...}, do {...} while( ); 과 다르게 반복을 위한 초기화/준비, 조건검사, 반복 후 증감 등을 한 번에 작성할 수 있다.

- for( ... ) 를 사용할 때에는 반복 실행되는 과정에 대해 정확히 이해할 필요가 있는데.
1. 반복 전 실행 수행(1번만 실행된다.)
2. 조건검사
3. 조건이 참이면 코드블록 실행
4. 코드블록 실행 후 증감 또는 처리 : 한 번 반복 후 처리
5. 조건검사
6. 조건이 참이면 코드블록 실행
...
의 순서로 처리된다.

 

< 예시 >

- int i, n;
scanf("%d", &n);
for(i=0; i<=n; i++)
{
  printf("%d ");
}
printf("\n");

- ** 일반적으로 반복 횟수를 카운트하면서 비교하기 위해 i 변수를 많이 사용한다.
  i : index, iterator ?

 

- 입력 : 정수 1개가 입력된다. (0 ~ 100)

ex ) 4

- 출력 : 0부터 그 수까지 줄을 바꿔 한 개씩 출력한다.

ex ) 0 1 2 3 4

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        for (int i = 0; i <= a; i++) {
            System.out.println(i);
        }
    }
}

 

완성된 코드

 

 

 

 

 

1078 : [기초-종합] 짝수 합 구하기

 

< 문제 설명 >

- 정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.

 

< 참고 >
- while( ) {...}, do {...} while( );, for(...; ...; ...) {...} 등의 반복문은 형태만 다르고, 똑같은 성능을 발휘한다. 필요에 따라 편리한 것으로 골라 사용하면 된다.

 

< 예시 >

- //아래의 예는 홀수일 경우만 더해 그 결과를 출력한다.
int sum=0;
int i, n;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
  if(i%2==1) sum=sum+i;
}


 

- 입력 : 정수 1개가 입력된다. (0 ~ 100)

ex ) 5

- 출력 : 1부터 입력된 수까지 짝수의 합을 출력한다.

ex ) 6

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int sum = 0;
        int a = sc.nextInt();

        for (int i = 1; i <= a; i++) {
            if (i % 2 == 0)
                sum += i;
        }
        System.out.println(sum);
    }
}

 

완성된 코드

 

 

 

 

 

1079 : [기초-종합] 원하는 문자가 입력될 때까지 반복 출력하기

 

< 문제 설명 >

- 'q'가 입력될 때까지 입력한 문자를 계속 출력하는 프로그램을 작성해보자.

 

 

- 입력 : 문자들이 1개씩 계속해서 입력된다.

ex ) x b k d l q g a c

- 출력 : 'q'가 입력될 때까지 입력된 문자를 줄을 바꿔 한 줄씩 출력한다.

ex ) x

       b

       k

       d 

       l 

       q

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true){
            char a = sc.next().charAt(0);
            if (a =='q') {
                System.out.println(a);
                break;
            }
            System.out.println(a);
        }
    }
}

 

완성된 코드

 

 

 

 

 

1080 : [기초-종합] 언제까지 더해야 할까?

 

< 문제 설명 >

- 1, 2, 3 ... 을 계속 더해 나갈 때, 그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지 계속 더하는 프로그램을 작성해보자.

- 즉, 1부터 n까지 정수를 계속 더한다고 할 때, 어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.

 

 

- 입력 : 정수 1개가 입력된다.

ex ) 55

- 출력 : 1, 2, 3, 4, 5 ... 를 순서대로 계속 더해 합을 만들어가다가, 입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다.

ex ) 10

 

package _CodeUp_;

import java.util.Scanner;

public class code2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int sum = 0;
        int a = sc.nextInt();

        for (int i = 1; ; i++) {
            sum += i;
            
            if (sum >= a) {
                System.out.println(i);
                break;
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

오늘도 문제를 다 풀어보았습니당

화이팅 - !

'JAVA' 카테고리의 다른 글

< (JAVA) 코드업 1091 ~ 1099 >  (1) 2024.04.15
< (JAVA) 코드업 1081 ~ 1090 >  (1) 2024.04.05
< (JAVA) 코드업 1061 ~ 1070 >  (0) 2024.03.29
< (JAVA) 코드업 1051 ~ 1060 >  (0) 2024.03.28
< (JAVA) 코드업 1041 ~ 1050 >  (0) 2024.03.21