제니노트

[기초-반복실행구조] 1071-1077 [자바] 본문

코딩테스트/코드업

[기초-반복실행구조] 1071-1077 [자바]

yangjennie 2023. 1. 31. 18:09
반응형

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라고 적혀있는 레이블로 실행 이동

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str=br.readLine();
        StringTokenizer st = new StringTokenizer(str," ");

        while(st.hasMoreTokens()) {
            String a = st.nextToken();

            if(a.equals("0")) {
                break;
            }else {
                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만큼 감소

 

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.\*;

public class Main {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str=br.readLine();
    String str2 = br.readLine();
    StringTokenizer st = new StringTokenizer(str2," ");

    while(st.hasMoreTokens()) {
        String str3 = st.nextToken();
        System.out.println(str3);


    }



}

}

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);
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();
    StringTokenizer st = new StringTokenizer(str," ");

    while(st.hasMoreTokens()) {
        String str2 = st.nextToken();

        if(str2.equals("0")) {
            break;
        }
        else {
            System.out.println(str2);
        }

    }



}


}

 

1074

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

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

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

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.\*;

public class Main {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();
    int a = Integer.parseInt(str);

    while(a!=0) {
        if(a<0 || a>100) {
            break;
        }
        else {
            System.out.println(a);
            a--;
        }

    }



}

}

1075

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

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

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.\*;

public class Main {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();
    int a = Integer.parseInt(str);

    while(a!=0) {
        if(a<0 || a>100) {
            break;
        }
        else {
            a--;
            System.out.println(a);
        }

    }



}

}

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;

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.\*;

public class Main {  
public static void main(String\[\] args) throws IOException {  
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
String str = br.readLine();  
char a = str.charAt(0);  
char b = 'a';
do {
    System.out.println(b );
    b++;
}while(b<=a);
}

}  

 

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 ?

 

package codeup;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String a = br.readLine();
		int b = Integer.parseInt(a);
		
		for(int i=0; i<=b; i++) {
			System.out.println(i);
		}
		
		

	}

}

 

 

 

반응형
Comments