문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

출력

각 테스트 케이스마다 A+B를 출력한다.


처음에 보고 ....? 했던 문제

아니 종료조건이 없는데 어떻게 종료를 하죠...? 였지만 이건 while 문 문제였다.

 

A, B를 한 줄에 입력받고, 공백(띄어쓰기)를 기준으로 분리한 후 더한 값을 append한다.

이때 while 조건 안에는 입력받은 라인이 null이 아닐 경우 로 주면 된다! 

 

문제를 풀면서 import 문제를 너무 많이 겪었었다 .. 

평소에는 Scanner 함수만 써서, Scanner 관련 모듈만 import했었는데 라인을 읽어오다보니 BufferedReader를 썼다.

 

거기서.. 에러가 좀 많이났었다

> InputStreamReader cannot be resolved to a type 이라던지..

> StringTokenizer cannot be resolved to a type 이라던지 ..

 

 

보통은 빨란 라인에 커서를 갖다 대면 이런 창이 뜨고, 해결할 수 있게 해결책? 을 제공해주기 때문에

import ~~ 되어있는 맨 위 솔루션을 클릭해서 해결해줬다.

 


 

소스코드

 

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
28
29
30
import java.io.*;
import java.util.StringTokenizer;
 
public class Main{
    public static void main(String[] args) {
        
        try {
            BufferedReader     br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
            
            StringBuilder     sb = new StringBuilder();
            
            String AB_Line;
            
            while( (AB_Line = br.readLine()) != null) {
                st = new StringTokenizer(AB_Line, " ");
                
                int A = Integer.parseInt(st.nextToken());
                int B = Integer.parseInt(st.nextToken());
                
                sb.append(A+B).append('\n');
            }
            
            System.out.println(sb);
        }
        
        catch (Exception e) {
        }
    }
}
cs
문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

 

출력

각 테스트 케이스마다 A+B를 출력한다.

 


for문 문제 졸업하고 시작하는 while문! 

코딩을 점점 안하게 되면서 (...) 반복문은 대부분 for문으로 쓰고, while문은 무한루프에만 쓰다보니까 생소하게 느껴진 데서 충격받았다.

 

while ( 조건 ) {

 수행구문

 

으로 동작하고, 조건이 참이면 동작 한다!

 

그래서 문제를 풀어보면

 

while (true) {

   A, B 입력

   

   if ( A, B가 0이면 ) break;

 

   A + B 출력

}

 

으로 해결할 수 있다.


 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        int A =0, B=0;
        Scanner scan = new Scanner(System.in);
        
        while (true) {
            A = scan.nextInt();
            B = scan.nextInt();
            if(A==0 && B==0break;
            System.out.println(A+B);
        }
    }
}
cs
문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

 

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

 


반복해서 입력받을 횟수 (N)와 검사할 조건 (X)를 입력받고,

N의 수만큼 입력받은 후 판별해서 출력해주면 되는 문제

if 문이 함께 쓰여야 한다!

 

 

N 입력

X 입력

 

for ( i는 0부터 N-1까지) {

   정수 입력 

   

   if (정수 < X ) 정수 출력

 

 


 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        int N = scan.nextInt();
        int X = scan.nextInt();
        
        for (int i=0; i<N; i++) {
            int num = scan.nextInt();
            if (num < X) {
                System.out.print(num+" ");
            }
        }
    }
}
cs
문제

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

 

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

 

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

 


2438 별찍기 문제에서 조금 더 변형시켜야 하는 문제!

 

acmicpc(baekjoon) - 2438 : 별 찍기 - 1

문제 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 풀이 이중 for

se-cure.tistory.com

2438 별찍기 문제에서는 

*

**

***

****

***** 

형태로 출력이 돼야 했으니까, 아래처럼 문제를 풀었다.

 

for( i는 1부터 N까지, 1씩 증가) {          -------- ( 1 )

   for ( j는 1부터 i까지, 1씩 증가) {        -------- ( 2 )

     * 출력

   }

}

 

 

하지만 이제 앞부분 공백이 들어가고, 우측 정렬로 출력이 되어야 하니까,

(1) 번 for문 안에 공백 출력하는 for 구문과, *을 출력하는 for 구문 두 개를 작성해줬다.

 

for ( i는 1부터 N까지, 1씩 증가 ) {          ------ (1)

      for ( j는 0부터 (N-i)-1까지, 1씩 증가 ) {   ------ (2) // for ( j=0; j<N-i; j++)

             공백 " " 출력

      }

 

      for ( k는 j부터 N-1까지, 1씩 증가 ) {    ------ (3)  // for ( k=j; k<N; k++)

             * 출력

      }

      개행

}

 

 

(1)은 똑같이 1~N으로 설정하고, (총 5줄 출력)

 

(2)번 for문은 공백을 출력한다.

 - 0부터 N-i까지, 즉 첫번째 라인 (i=1) 일 때는 공백이 4개, 두 번째 라인 (i=2)일 때는 공백이 3개여야 하므로 n-i 로 설정한다. 

 

(3)번 for문에서는 *을 출력한다.

 - j부터 N-1까지인데, 이유는 (2)번 for문에서 공백이 출력이 되었으므로, 그 개수 이후부터, N개만큼 출력되어야 한다.

   예를 들어, 두 번째 라인 (i=2)일 때, j는 0부터 (N-i)-1 (== 2) 까지 총 3번 출력되었을 것이다. 

   이 때 남은 2개는 *이 출력되어야 하므로, 조건을 k는 j부터, k < N 으로 설정해주면 3, 4 이렇게 두 번 반복한다.

 

 

 


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        int N = scan.nextInt();
        int j;
        for (int i=1; i<=N; i++) {
            for (j=0; j<N-i; j++) {
                System.out.print(" ");
            }
            for (int k=j; k<N; k++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}
cs
문제

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

 

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

 

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

 

 

 

 

풀이

이중 for문으로 해결한 문제!

 

N 을 우선적으로 입력받고, 

첫 번째 for문에는 N번째 줄까지 반복할 줄의 수를 설정하고,

그 안의 두 번째 for문에는 각 줄별로 출력하는 *의 수를 설정하면 된다.

 

for( i는 1부터 N까지, 1씩 증가) {          -------- ( 1 )

   for ( j는 1부터 i까지, 1씩 증가) {        -------- ( 2 )

     * 출력

   }

}

 

(1)에서 i가 하나씩 증가하면서, 첫 번째, 두 번째, 세 번째 라인을 출력하게 되고

내부 (2)로 들어가면 1부터 i까지, 즉 첫 번째 라인이라면 1부터 1까지 (1개), 두 번째 라인이라면 1부터 2까지 (1,2로 2개)  ....

*을 출력하게 된다. 

 

 

소스코드

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 scan = new Scanner(System.in);
        
        int N = scan.nextInt();
        
        for (int i=1; i<=N; i++) {
            for (int j=0; j<i; j++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}
cs

+ Recent posts