10807 개수 세기
자바에서는 배열 선언과 생성 두 단계가 필요하다.
선언 : int intArrary[] 또는 int[] intArray
생성(배열 공간 할당) : intArray = new int[5]
또는 int intArray[] = new int[5]와 같이 선언과 동시에 배열 생성이 가능하다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i=Integer.parseInt(br.readLine());
int[] arr = new int[i];
int count=0;
StringTokenizer st = new StringTokenizer(br.readLine());;
for(int n = 0; n < i; n++){
arr[n] = Integer.parseInt(st.nextToken());
}
int b = Integer.parseInt(br.readLine());
for(int j = 0; j < arr.length; j++){
if(b == arr[j]) {
count++;
}
}
System.out.println(count);
}
}
위와 같이 배열 선언 및 생성을 동시에 해주고 반복문으로 초기화했다.
length() 메서드로 배열의 길이를 반환할 수 있다.
10871 X보다 작은 수
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str[] =br.readLine().split(" ");
int a = Integer.parseInt(str[0]);
int b = Integer.parseInt(str[1]);
int[] arr = new int[a];
StringTokenizer st = new StringTokenizer(br.readLine());;
for(int n = 0; n < a; n++){
arr[n] = Integer.parseInt(st.nextToken());
}
for(int j = 0; j < arr.length; j++){
if(b > arr[j]) {
bw.write(arr[j] + " ");
}
}
bw.flush();
bw.close();
br.close();
}
}
배열을 선언하지 않고 입력받자마자 따로 변수에 저장 후 바로 b와 비교하여 저장 후 출력하면 더 빨라진다.
10818 최소, 최대
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int a = Integer.parseInt(br.readLine());
int arr[] = new int[a];
StringTokenizer st = new StringTokenizer(br.readLine());;
for(int n = 0; n < a; n++){
arr[n] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
System.out.println(arr[0] + " " + arr[a-1]);
br.close();
}
}
max, min 값을 설정하고 비교할 수도 있지만...
Arrays.sort()를 이용하면 오름차순으로 바로 정렬되므로 이를 이용한다.
index[-1]은 없다...
2562 최댓값
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//int arr[] = new int[9];
int a=0;
int max=0;
int idx=0;
for(int n = 0; n < 9; n++){
a = Integer.parseInt(br.readLine());
if (a>max){
idx=n+1;
max=a;
}
}
System.out.println(max);
System.out.println(idx);
}
}
배열을 이용하지 않고 풀어봤다.
10810 공 넣기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str," ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int arr[] = new int[a];
for(int n = 0; n < b; n++){
String str2 = br.readLine();
StringTokenizer st2 = new StringTokenizer(str2," ");
int a2 = Integer.parseInt(st2.nextToken());
int b2 = Integer.parseInt(st2.nextToken());
int c2 = Integer.parseInt(st2.nextToken());
for (int i=a2-1;i<b2;i++){
arr[i]=c2;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
공을 넣을 때 바구니는 인덱스와 다르므로 a2-1을 해주어야 한다.
5597 과제 안 내신 분..?
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int arr[] = new int[30];
for(int n = 0; n < 28; n++){
int a = Integer.parseInt(br.readLine());
arr[a-1]=1;
}
for (int i = 0; i < 30; i++) {
if (arr[i]!=1){
System.out.println(i+1);
}
}
}
}
JAVA는 따로 초기화 안하면 0으로 초기화된다.
3052 나머지
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
boolean[] arr = new boolean[42];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int i = 0 ; i < 10 ; i++) {
arr[Integer.parseInt(br.readLine()) % 42] = true;
}
int count = 0;
for(boolean value : arr) {
if(value){ // value 가 true 라면
count++;
}
}
System.out.println(count);
}
}
boolean 배열을 선언한 후, 나머지 연산을 이용해 해당하는 나머지가 있으면 True로 저장한다.
(boolean 배열의 default 값은 false)
그 후 true인 값을 만나면 count++로 나머지가 다른 수의 개수를 샐 수 있다.
import java.util.HashSet;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashSet<Integer> h = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
h.add(Integer.parseInt(br.readLine()) % 42);
}
System.out.print(h.size());
}
}
JAVA의 HashSet을 이용할 수 있다!
HashSet은 Set(집합)과 비슷하다. 순서가 따로 없고 중복 저장이 안된다.
HashSet<Integer> h = new HashSet<Integer>(); 와 같이 HashSet을 생성하고 선언할 수 있다.
add() 메서드로 HashSet에 값을 넣는데, 중복되는 값이 없으면 저장되며 True를 반환하고, 있으면 저장되지 않고 False를 반환한다.
10811 바구니 뒤집기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
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 arr[] = new int[n];
for (int i=0; i<n; i++){
arr[i]=i+1;
}
for (int i=0; i<m; i++){
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken())-1;
int b = Integer.parseInt(st.nextToken())-1;
while(a<b){
int temp=arr[a];
arr[a++]=arr[b];
arr[b--]=temp;
}
}
for (int i=0; i<n; i++){
System.out.print(arr[i]+ " ");
}
}
}
주어진 두 a,b를 바꾸는 것이 아닌 그 범위 내의 모든 수를 역순으로 바꾸는 것이다.
1546 평균
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
double arr[] = new double[a];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i=0; i<a; i++){
arr[i] = Double.parseDouble(st.nextToken());
}
Arrays.sort(arr);
for (int i=0; i<a; i++){
arr[i] = (arr[i]/arr[a-1])*100;
}
double average = Arrays.stream(arr).average().orElse(0);
System.out.println(average);
}
}
괄호를 잘 해주지 않으면 계산이 제대로 되지 않는다...
또 Arrays.stream에서 평균을 구하는 메서드를 이용해서 구해주었다. 특이한 점은 Arrays.stream(arr).average()를 그대로 print하면 틀리게 뜬다. 변수 종류도 같이 출력해서 그런듯...
orElse(0)은 average()가 리턴한 값이 없으면 null대신 0을 리턴한다.
# 회고
Stream을 이용하면 배열을 좀 더 쉽게 다룰 수 있다.
백준 카테고리를 따로 만들었다!
'코딩테스트' 카테고리의 다른 글
[JAVA] 심화 1 (0) | 2024.01.17 |
---|---|
[JAVA] 문자열 (0) | 2024.01.16 |
[JAVA] 반복문 (1) | 2024.01.13 |
[JAVA] 조건문 (0) | 2024.01.12 |
[JAVA] 입출력과 사칙연산 (1) | 2024.01.10 |