본문으로 바로가기
728x90

#1071

 

 

문제 설명

정수가 순서대로 입력된다.
-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, 단 개수는 알 수 없다.


출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        while(true) {
            int n=sc.nextInt();
        
            if(n==0)
                break;
            System.out.println(n);
        }
    
    }
}
 
 
 

 

 

#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의 최대 개수는 알 수 없다.


출력

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

 

 

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
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        int m[]=new int[n];
        
        for(int i=0;i<n;i++) {
            
            m[i]=sc.nextInt();
            
        }
        
        for(int i=0;i<n;i++) {
        
        System.out.println(m[i]);
            
        }
    
    }
}
 
 
 

 

 

#1073

 

 

문제 설명   

정수가 순서대로 입력된다.
-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, 단 개수는 알 수 없다.


출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        while(true) {
            
            int n=sc.nextInt();
            
            if(n==0)
                break;
            
            System.out.println(n);
        }
        
    
    }
}
 
 
 

 

 

#1074

 

 

문제 설명

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


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

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

입력

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


출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        
        while(true) {
            
            if(n==0)
                break;
            
            System.out.println(n);
            n--;
            
        }
    
    }
}
 
 
 

 

 

#1075

 

 

문제 설명    내 문제집에 추가

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


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

입력

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

출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        
        while(true) {
            
            n--;
            System.out.println(n);
            
            if(n==0)
                break;
            
            
        }
    
    }
}
 
 
 

 

 

#1076

 

 

문제 설명

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


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

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

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

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

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

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

예를 들어

n = n + 3;

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

n = n << 1;

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

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

입력

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


출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Main {
    
    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.print(i+" ");
        }
    
    }
}
 
 
 

 

 

#1077

 

 

문제 설명

정수(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)


출력

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Main{
    
    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)


출력

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        int sum=0;
        int n=sc.nextInt();
        
        for(int i=1;i<=n;i++) {
            
            if(i%2==0)
                sum+=i;
        }
        
        System.out.println(sum);
    
    }
}
 
 
 

 

 

#1079

 

 

문제 설명

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

입력

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


출력

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

 

<나의 답>

 

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
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        
        String s=sc.nextLine();
        
        String str[]=s.split(" ");
        String a="q";
        
        for(int i=0;i<str.length;i++) {
            
            
            System.out.println(str[i]);
            
            if(str[i].equals(a)) {
                break;
            }
        }
        
    }
}
 
 
 
 

 

<다른 방법>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class Main {
    
    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개가 입력된다.


출력

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

 

 

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
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        int n = sc.nextInt();
 
        int sum = 0;
        int cnt = 0;
 
        if (n >= 0 && n <= 1000) {
 
            while (sum < n) {
                cnt++;
                sum += cnt;
            }
        }
        
        System.out.println(cnt);
 
    }
}
 
 
 

 

<다른 풀이>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        int n = sc.nextInt();
        int sum = 0;
 
        for (int i = 1;; i++) {
            sum += i;
 
            if (sum >= n) {
                System.out.println(i);
                break;
            }
 
        }
 
    }
}
 
 
 

 

 

728x90