본문 바로가기

Projects/백준 문제

백준 10871번 자바 문제 List ArrayList

반응형

3가지 방식으로 문제를 풀어봤다.

 

 

리스트에 원소가 추가되는 방식을 이 문제를 풀면서 배웠다.

 

리스트를 만들 때는

 

데이터타입 리스트명[] = new 데이터타입[데이터크기];

 

인덱스로 데이터를 가져올 때는

리스트명[인데스번호]

 

 

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
//		문제
//		정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 
//		이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
//
//		입력
//		첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
//
//		둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 
//		주어지는 정수는 모두 1보다 크거나 같고, 
//		10,000보다 작거나 같은 정수이다.
//
//		출력
//		X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. 
//		X보다 작은 수는 적어도 하나 존재한다.
		
		
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int X = sc.nextInt();
		// 배열의 크기는 N개가 들어가는 것이므로 N
		int arr[] = new int[N];
		
		
		// 배열i에 두 번째 줄 숫자가 들어가도록 한다.
		for (int i = 0; i < N; i++) {
		
			arr[i] = sc.nextInt(); 
			
			}

		sc.close();
		
		// X보다 작을 경우 배열의 인덱스[i]를 띄어쓰기와 함께 출력하라는 것이다.
		for (int i=0;i < N;i++) {
			if (arr[i] < X) {
				System.out.print(arr[i] + " ");
			}
		}
		
			
		
		

	}

}

 

 

 

ArrayList도 동일한데 코드가 조금 다르다.

 

ArrayList만들 때

ArrayList<데이터타입> 리스트명 = new ArrayList<데이터타입>();

 

ArrayList에 데이터 추가할 때

리스트명.add();


ArrayList에서 데이터 가져올 때

리스트명.get(인덱스번호);
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
//		문제
//		정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 
//		이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
//
//		입력
//		첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
//
//		둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 
//		주어지는 정수는 모두 1보다 크거나 같고, 
//		10,000보다 작거나 같은 정수이다.
//
//		출력
//		X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. 
//		X보다 작은 수는 적어도 하나 존재한다.
		
		
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int X = sc.nextInt();
		ArrayList<Integer> A = new ArrayList<Integer>();
		
		
		for (int i = 0; i < N; i++) {
		
			A.add(sc.nextInt()); 
			
			}

		sc.close();
		
		for (int i=0;i < N;i++) {
			if (A.get(i) < X) {
				System.out.print(A.get(i) + " ");
			}
		}
		
			
		
		

	}

}

 

 

BufferedReader와 BufferedWriter를 사용한 입출력 아직 익숙하지가 않다.

package bj10871;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
//		문제
//		정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 
//		이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
//
//		입력
//		첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
//
//		둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 
//		주어지는 정수는 모두 1보다 크거나 같고, 
//		10,000보다 작거나 같은 정수이다.
//
//		출력
//		X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. 
//		X보다 작은 수는 적어도 하나 존재한다.
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int N = Integer.parseInt(st.nextToken());
		int X = Integer.parseInt(st.nextToken());
		
		
		ArrayList<Integer> A = new ArrayList<Integer>();
		
		
		for (int i = 0; i < N; i++) {
			
			A.add(Integer.parseInt(st.nextToken()));
			
			}

		br.close();
		
		for (int i=0;i < N;i++) {
			if (A.get(i) < X) {
				int a = A.get(i);
				bw.write(a + " ");
			
			}
			bw.flush();
			bw.close();
		}
		
			
		
		

	}

}

42번에서 에러가 나오는데, 이유를 알 수 없어 질문을 올려놨다.

 

 

package bj10871;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
//		문제
//		정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 
//		이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
//
//		입력
//		첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
//
//		둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 
//		주어지는 정수는 모두 1보다 크거나 같고, 
//		10,000보다 작거나 같은 정수이다.
//
//		출력
//		X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. 
//		X보다 작은 수는 적어도 하나 존재한다.
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		// br.readLine이라는 것이 한 줄만 읽는 것이기 때문에 한 줄 리딩이 끝났으면
	
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int N = Integer.parseInt(st.nextToken());
		int X = Integer.parseInt(st.nextToken());
		// 이렇게 다시 한 줄을 읽을 수 있는 것을 써줘야 한다.
		st = new StringTokenizer(br.readLine(), " ");
		
		ArrayList<Integer> A = new ArrayList<Integer>();
		
		
		for (int i = 0; i < N; i++) {
			
			A.add(Integer.parseInt(st.nextToken()));
			
			}

		br.close();
		
		for (int i=0;i < N;i++) {
			if (A.get(i) < X) {
				int a = A.get(i);
				bw.write(a + " ");
			
			}
			
		}
		// bw 쓰는 마지막 위치, for문이 끝난 뒤에 중괄호 위치를 잘 확인하자!
		bw.flush();
		bw.close();
			
		
		

	}

}
반응형