문제 

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.

도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.

공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.

 

입력

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

둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)

도현이는 입력으로 주어진 순서대로 공을 넣는다.

 

출력

1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.
공이 들어있지 않은 바구니는 0을 출력한다.

 

 

 

 

 


 

 

 

 

 

 

제출 답안1 - 오답, 틀린이유


  • StingTokenizer를 for문 밖으로 빼놓고 for문 안에서 계속 입력을 받기위해 시도하니 런타임에러(NoSuchElement)가 발생했다.

 

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


public class Main{

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());   // 바구니 갯수
        int M = Integer.parseInt(st.nextToken());   // 공 넣는 횟수
        int[] baskets = new int[N];

        st = new StringTokenizer(br.readLine(), " ");
        for(int z=0; z<M; z++){

            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());

            for (int x = i-1; x<j; x++){
                baskets[x] = k;
            }

        }

        br.close();

        for (int basket : baskets){
            System.out.print(basket + " ");
        }

    }
}

 

 

 

 

 


 

 

 

 

  • 먼저 작성한 답과 정답처리된 답의 차이점을 챗GPT를 통해 요청하였는데 다음과 같은 답을 얻을 수 있었다. 
  • 입력처리방식의 문제다.
  • m번의 루프를 돌때마다 매번 새로운 입력값을 받아와야 하므로 입력방식역시 매번 st를 새로 생성하는 방향이 맞다.

 

 

  • 왼쪽의 st를 오른쪽 코드와같이 for문 내부로 넣어주었다.

 

 

 

 

 

 

 


 

 

 

 

 

 

제출답안 : 수정답안, 정답


  • for문 내부에서 매번 루프를 돌때마다 새로 생성하니 정답처리 되었다.

import java.io.*;
import java.util.*;


public class Main{

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());   // 바구니 갯수
        int M = Integer.parseInt(st.nextToken());   // 공 넣는 횟수
        int[] baskets = new int[N];


        for(int z=0; z<M; z++){
            st = new StringTokenizer(br.readLine(), " ");
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());

            for (int x = i-1; x<j; x++){
                baskets[x] = k;
            }

        }

        br.close();

        for (int basket : baskets){
            System.out.print(basket + " ");
        }

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

문제 

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다. 도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다. 공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 들어있는 공을 교환한다는 뜻이다. (1 ≤ i ≤ j ≤ N) 도현이는 입력으로 주어진 순서대로 공을 교환한다.

 

출력

1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.

 

 

 

 


 

 

 

 

 

제출 답안1 - 오답, 틀린이유


  • 배열을 크기를 잘못설정했다. 1부터 시작해 N번 for 문을 돌면, 배열의 크기를 N+1 개로 설정해두었어야 한다.
  • 마지막 출력시 for문을 돌때 0번 인덱스부터 시작하고 있다. 그러므로 존재하지않는 0번 바구니가 출력된다. z를 1부터 돌도록 초기값을 주어야 했다.  

import java.io.*;
import java.util.*;

public class Main{

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();   // 바구니 개수
        int M = sc.nextInt();   // 공의 수
        int[] baskets = new int[N];

        // 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
        for(int i=1; i<=N; i++){
            baskets[i] = i;
        }

        // M번동안, i번 바구니와 j번 바구니에 들어있는 공을 교환한다.
        for(int y=0; y<M; y++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            int temp = baskets[a];
            baskets[a] = baskets[b];
            baskets[b] = temp;
        }

        for(int z=0; z<=N; z++){
            System.out.print(baskets[z] + " ");

        }
        sc.close();

    }

}

 

 

 

 

 


 

 

 

 

  • 먼저 작성한 답에 대한 첨언을 챗GPT를 통해 요청하였는데 다음과 같은 답을 얻을 수 있었다. 
  • 배열의 크기에 대한 정정 피드백을 얻었다. 

 

 

 

  • 조금더 개선된 코드역시 얻을 수 있었다.
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();   // 바구니 개수
        int M = sc.nextInt();   // 공의 수
        int[] baskets = new int[N + 1];  // 크기를 N+1로 설정

        // 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
        for (int i = 1; i <= N; i++) {
            baskets[i] = i;
        }

        // M번동안, i번 바구니와 j번 바구니에 들어있는 공을 교환한다.
        for (int y = 0; y < M; y++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int temp = baskets[a];
            baskets[a] = baskets[b];
            baskets[b] = temp;
        }

        for (int z = 1; z <= N; z++) {  // 바구니 번호를 1부터 N까지 출력
            System.out.print(baskets[z] + " ");
        }
        
        sc.close();
    }
}

 

 

 

 

 

Baekjoon 10813 공 바꾸기 JAVA

10813번: 공 바꾸기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은

hunucho.tistory.com

 

 

 

 

 

 


 

 

 

 

 

 

제출답안 : 수정답안, 정답


  • 1번부터 for문이 N번 돌 수 있도록 배열의 크기를 N+1로 늘려주었다.
  • 교환이후 최종 출력시 1번 바스켓 부터 출력될 수 있도록 z크기를 1로 초기값 설정 해 주었다. 

import java.io.*;
import java.util.*;

public class Main{

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();   // 바구니 개수
        int M = sc.nextInt();   // 공의 수
        int[] baskets = new int[N+1];

        // 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
        for(int i=1; i<=N; i++){
            baskets[i] = i;
        }

        // M번동안, i번 바구니와 j번 바구니에 들어있는 공을 교환한다.
        for(int y=0; y<M; y++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            int temp = baskets[a];
            baskets[a] = baskets[b];
            baskets[b] = temp;
        }

        for(int z=1; z<=N; z++){
            System.out.print(baskets[z] + " ");

        }

        sc.close();

    }

}

 

 

배열 생성시 늘 인덱스 0번을 고려해야해서 참 헷갈리는 것 같다...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제 

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

 

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

 

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

 

 

 


 

 

 

 

제출 답안1 - 오답, 틀린이유


  • [기존에 입력된 배열 순서] 기준으로 몇번째인지 출력해야하는데 
  • 오름차순으로 정렬한 후, 정렬된 값 에서 최대값의 위치를 찾으려고 했다.
  • 입력받은 배열은 순서를 찾도록 두고, 새로운 배열에 복사를 해서 오름차순 정렬 최댓값을 찾아야 한다.
  • 문제에서 이미 9개의 수로 제한을 해두었는데, 배열 범위를 지정해두지않았다. 
  • 배열을 복사하는 방법이 잘못됐다.

import java.util.Scanner;

public class Main{
    
    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();
            }

        sc.close();

        Arrays.sort(arr);       // 배열 오름차순 정렬
        int maxNum = arr[N-1];  // 최대값
        int seq = 0;            // 몇번째인지 저장

            for (int y=0; y<N; y++){
                // arr[y]번 배열을 돌다가 최대값을 찾으면 
                if(arr[y] == maxNum){
                    seq = y + 1; // 인덱스 + 1
                }                
            }

        System.out.println(maxNum);     // 최대값 출력
        System.out.println(seq);        // 몇번째인지 출력

    }
}

 

 

 

 

 


 

 

 

 

  • 먼저 작성한 답에 대한 첨언을 챗GPT를 통해 요청하였는데 다음과 같은 답을 얻을 수 있었다. 
  • 배열을 복사하는 방법이 잘못됐다는 피드백을 얻었다. 

 

 

 

  • 조금더 개선된 코드역시 얻을 수 있었다.
int N = sc.nextInt();
int[] arr = new int[N];
int[] arr1 = new int[N]; // 정렬하지않고 복사할 배열

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

sc.close();

// 복사
System.arraycopy(arr, 0, arr1, 0, N);

 

 

 

  • 배열을 복사하는 방법에 대한 지식은 여기서 다시 회고할 수 있었다.
  • 역시, 백날 이론을 배우는 것보다 한번 실제로 사용하는 것이 낫다. 즉, 백문이 불여일용이다. 
  • 참고 블로그 :  https://developer-talk.tistory.com/710
 

[Java]배열 복사하는 방법

배열 복사하는 방법 Java에서 배열은 기본 타입이 아닌 참조 타입입니다. 따라서, 배열의 실제 데이터는 Heap 영역에 생성되고 변수는 Stack 영역에 생성됩니다. Stack 영역에 생성된 변수는 참조 값(H

developer-talk.tistory.com

 

 

 

[Java 강의104] System 클래스 사용하기 - 5 (배열 복사, arraycopy)

안녕하세요 모프 입니다. 이번엔 "System" 클래스의 기능 중에서 배열을 복사하는 "arraycopy" 메소드를 ...

blog.naver.com

 

 

 

 

 

 

  • 내가 실수한 부분 되시겠다. 

 

 

 

  • 챗 GPT가 교정해준 배열 복사 방법이다. 

 

 

 

 

 

 


 

 

 

 

 

 

제출답안 : 수정답안, 정답


  • 배열수도 한정해주고, 배열의 복사도 수정했더니 정답 처리 되었다. 

import java.util.*;

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

        Scanner sc = new Scanner(System.in);
        int[] arr = new int[9];
        int[] arr1 = new int[9]; // 정렬하지않고 복사할 배열

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

        sc.close();

        // 복사
        //arr1 = arr;
        System.arraycopy(arr, 0, arr1, 0, 9);


        // 복사후 배열 정렬
        Arrays.sort(arr1);       // 배열 오름차순 정렬
        int maxNum = arr1[8];  // 최대값
        int seq = 0;            // 몇번째인지 저장

            for (int y=0; y<9; y++){
                // arr[y]번 배열을 돌다가 최대값을 찾으면 
                if(arr[y] == maxNum){
                    seq = y; // 인덱스 + 1
                }                
            }

        System.out.println(maxNum);     // 최대값 출력
        System.out.println(seq + 1);        // 몇번째인지 출력

    }
}

 

 

 

 

 

 


 

 

 

 

  • 같은 문제에 대하여 BufferedReader로도 작성을 해 보았다. 

import java.io.*;
import java.util.*;

public class Main{

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[9];
            // 9개 정수 순차적으로 입력
            for(int i=0; i<9; i++){
                arr[i] = Integer.parseInt(br.readLine()); 
            }

        // 복사할 배열 만들기
        int[] arr1 = new int[9];

        // 배열 복사
        System.arraycopy(arr, 0, arr1, 0, 9);

        // 배열오름차순 정렬후, 가장 큰 수 찾기
        Arrays.sort(arr1);
        int max = arr1[8];
        int seq = 0;

        for (int i=0; i<9; i++){
            if(arr[i] == max){
                // 정렬전 배열 중 최대값의 max 자리수
                seq = i + 1;
            }
        }

        System.out.println(max);
        System.out.println(seq);

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

  • 그런데 확실히, Scanner 보다는 BufferedReader 가 메모리나 시간을 훨씬 더 단축시키는데 도움이 되는 것 같다. 

 

 

 

 

 

 

 

 

 

 

문제 

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

 

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

 

 

 

 

 

 

 

 

제출 답안 


import java.util.*;
public class Main{

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

		sc.close();

		Arrays.sort(arr);
		System.out.println(arr[0] + " " + arr[N-1]);
		}
}

 

 

 

 

 

 

  • 매번 Scanner로 입력받다가, 속도면에서는 BufferedReader가 낫길래 처음으로 답변 제출을 해봤는데 수차례 틀렸다.
  • BufferedReader보다 Scanner 가 훨씬 쉽고 사용하기도 간단해서 자꾸 Scanner만 찾게 된다. 
  • 역시 아래 블로그에서 힌트를 얻었다. 
  • https://st-lab.tistory.com/43
 

[백준] 10818번 : 최소, 최대 - JAVA [자바]

https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나

st-lab.tistory.com

 

import java.util.*;
import java.io.*;

public class Main{

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());

		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int index = 0;
		int[] arr = new int[N];
		while(st.hasMoreTokens()){
			arr[index] = Integer.parseInt(st.nextToken());
			index++;
		}

		Arrays.sort(arr);
		System.out.println(arr[0] + " " + arr[N-1]);

	}
}

 

 

 

 

 

 

 

 

 

 

 

 

문제 

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

 

입력

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

 

출력

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

 

 

 

 

 

 

 

 

 

제출 답안 


import java.util.Scanner;
public class Main{

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // 정수의 개수
		int X = sc.nextInt(); // 기준이 되는 정수 X
		int[] A = new int[N]; // 정수 N개로 이루어진 수열 A

		for(int i=0; i<N; i++){
			A[i] = sc.nextInt();

			if (A[i] < X){
				System.out.print(A[i] + " ");
			}
		}
        
		sc.close();
	}

}

 

 

 

 

 

  • 매번 Scanner로 입력받다가, 속도면에서는 BufferedReader가 낫길래 처음으로 답변 제출을 해봤는데 수차례 틀렸다.
  • 그래서 아래 블로그에서 힌트를 얻었다. 
  • https://st-lab.tistory.com/38
 

[백준] 10871번 : X보다 작은 수 - JAVA [자바]

https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000

st-lab.tistory.com

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
		int N = Integer.parseInt(st.nextToken());
		int X = Integer.parseInt(st.nextToken());
 
		StringBuilder sb = new StringBuilder();
 
		st = new StringTokenizer(br.readLine(), " ");
		
		for (int i = 0; i < N; i++) {
			int value = Integer.parseInt(st.nextToken());
 
			if (value < X)
				sb.append(value).append(' ');
		}
		System.out.println(sb);
	}
}

 

 

 

 

 

 

 

 

 

문제 

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

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.

 

출력

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

 

 


 

 

 

제출 답안 - 오답


  • 틀렸다고 생각한 이유
  • 문제1. 배열 선언방식 잘 못 됨, int[] arr = new int[n] 와같은 방식으로 선언되어야 함
  • 문제2. if문 조건 중 빠져나오는 조건 설정 오류  
  • 문제3. 향상된 FOR 문사용시 발생하는 문제 (1000 배열중 0값 입력 된것도 출력되는 점) 간과함, 몇개가 입력될지모르므로 배열길이를 넉넉히 선언한 후, 반복한 i횟수 만큼만 출력해야 함  

import java.util.Scanner;
public class Main{

	public static void main(String[] args){
		
		Scanner sc = new Scanner(System.in);
		int i = 0;
		int arr[] = new arr[];		// 배열 선언 오류

		while(true){

			int A = sc.nextInt();
			int B = sc.nextInt();

			if(A > 0 && B > 0){		// 조건설정 오류, 0과 0이 아닌 수가 들어올 경우 처리x
				arr[i] = A + B;

			} else {
				break;
			}

			i++;
		}

		sc.close();

		for (int sum : arr){	// 선언한 배열 길이 1000개가 모두 출력
			System.out.println(sum);
		}
	}

}

 

 

 

  • 답 제출전 먼저 첨언을 챗GPT를 통해 요청하였는데 다음과 같은 답을 얻을 수 있었다. 

 


 

 

 

 

  • gpt의 도움을 받고도 수정을 한 코드도 정답처리가 되지못하자 구글링을 해보았다.
  • 그제야 내 코드의 문제점을 알았는데, 랜덤 값을 내장함수인 Math.random()을 통해서 받아오려 한 것이었다. 
  • 함수를 제거하고 세가지 주사위수를 Scanner를 통해서 받아오자 그제야 정답 처리될 수 있었다. 랜덤 함수도 한번 써보았으니 의미있는 오답이었다. 
  • 참고 블로그 : https://st-lab.tistory.com/295
 

[백준] 2480번 : 주사위 세개 - JAVA [자바]

https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)

st-lab.tistory.com

 

 

 

 

 

 


 

 

 

 

 

 

 

제출답안 : 수정답안, 정답


  • 배열길이 수정, 조건 수정(두 값 모두 0일때 break; 타도록) 
  • 향상된 for문을 일반 for문으로 돌도록 수정했다.

import java.util.Scanner;
public class Main{

	public static void main(String[] args){
		
		Scanner sc = new Scanner(System.in);
		int i = 0;
		int[] arr = new int[1000];		

		while(true){

			int A = sc.nextInt();
			int B = sc.nextInt();

			if(A == 0 && B == 0){
				break;
			}

			arr[i] = A + B;

			i++;
		}

		sc.close();

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

 

 

 

 

 

 

  • 순간 반복문에 혼동이 와서 마지막 출력을 System.out.println(arr[j]); 로 할 경우 arr[i]보다 하나 적은값을 출력하는 것은 아닌가 계속 혼동이 왔다.
  • 그러나 곧 i는 인덱스 값이 아니라 반복한 '횟수' 값임을 이해하자 작성한 코드가 납득이 갔다. 

 

 

 

 

 

 

 

 

 

문제 

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

 

출력

첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.

 

 

 

 

 


 

 

 

 

 

제출 답안


import java.util.Scanner;
public class Main{

	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++){
				int num = sc.nextInt();
				arr[i] = num;
			}

		int v = sc.nextInt();	// 찾으려는 정수
		int cnt = 0;

		for (int k : arr){
			if(k == v){
				cnt ++;
			}
		}

		sc.close();
		System.out.println(cnt);

	}

}

 

 

 

 

 

 

 

 

 

문제 

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

 

입력

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

 

출력

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

 

 


 

 

 

 

 

제출 답안 


import java.util.Scanner;

public class Main{

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		sc.close();

		for(int i=1; i<=num; i++){

			for(int y=1; y<=(num-i); y++){
				System.out.print(" ");
			}

			for(int j=1; j<=i; j++){
				System.out.print("*");
			}

		System.out.println();

		}
	}
}

 

 

 

 

 

 

 

 

 

 

문제 

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

 

입력

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

 

출력

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

 

 

 


 

 

 

 

 

제출 답안 


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        sc.close();

        for (int i = 0; i < num; i++) {
            for (int y = 0; y <= i; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

문제 

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

 

입력

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

 

출력

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

 

 

 


 

 

 

 

 

제출 답안 


  • 11021 문제와 비슷해서 한두줄만 수정하면 됐다. 

import java.util.Scanner;

public class Main{

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);

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

		for (int i=0; i<T; i++){
			int A = sc.nextInt();
			int B = sc.nextInt();
			arr[i] = A + B;
			System.out.println("Case #"+(i+1)+": "+A+" + "+B+" = "+arr[i]);
		}

		sc.close(); 

	}

}

 

 

 

 

 

 

 

 

 

+ Recent posts