scpc d-13
1070
월이 입력될 때 계절 이름이 출력되도록 해보자.
예
월 : 계절 이름
12, 1, 2 : winter
3, 4, 5 : spring
6, 7, 8 : summer
9, 10, 11 : fall
참고
swtich( ).. case ... break; 제어문에서
break;를 제거하면 멈추지 않고 다음 명령이 실행되는 특성을 이용할 수 있다.
switch(a)
{
...
case 3:
case 4:
case 5:
printf("spring");
break;
...
}
로 작성하면, 3, 4, 5가 입력되었을 때 모두 "spring"이 출력된다.
** 12, 1, 2 는 어떻게 처리해야 할지 여러 가지로 생각해 보아야 한다.
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.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr;
int count=0;
while(true) {
arr = sc.nextInt();
if(arr ==0)break;
System.out.println(arr);
}
}
//0입력될떄까지 무한입력
}
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.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int size = sc.nextInt();
for(int i=0; i<size; i++) {
int a = sc.nextInt();
System.out.println(a);
}
}
}
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.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
for(;;) {
int a = sc.nextInt();
if(a==0)break;
System.out.println(a);
}
}
}
1074
정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int c = sc.nextInt();
for(int i=c; i>0; i--){
System.out.println(i);
}
}
}
'알고리즘 > SCPC준비' 카테고리의 다른 글
[JAVA]코드업 1080~1084 자바코드 (0) | 2020.08.08 |
---|---|
[JAVA] 코드업 1075~1079 자바코드 (0) | 2020.08.08 |
[JAVA] 코드업 1065 ~ 1069 자바코드 (0) | 2020.08.08 |
[JAVA] 코드업 1060~ 1064 자바코드 (0) | 2020.08.08 |
[JAVA] 코드업 1055~1059 자바코드 (0) | 2020.08.08 |