[Algorithm/Java] 백준 1337번 - 올바른 배열
https://www.acmicpc.net/problem/1337
🔍 문제 풀이
문제 도식화
for(int j=list.get(i); j<list.get(i) + 5; j++)
는 인덱스가 아닌 값에 접근하는 것이므로, if(list.contains(j)) cnt++;
했을 때 인덱스 오류가 발생하지 않음에 유의하자.
💻 코드
contains 사용
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 n = Integer.parseInt(br.readLine());
List<Integer> list = new ArrayList<>();
for(int i=0; i<n; i++){
list.add(Integer.parseInt(br.readLine()));
}
int max = Integer.MIN_VALUE;
for(int i=0; i<n; i++){
int num = list.get(i);
int cnt = 0;
// 현재 원소부터 5칸 구간 안에 포함된 수 세기
for(int j=num; j<num+5; j++){
if(list.contains(j)) cnt++; // 포함됐다면 cnt ++
}
max = Math.max(max, cnt); // 최대 포함 개수 갱신
}
System.out.println(5- max); // 부족한 원소 개수 출력
}
}
3중 for문 사용
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());
int[] arr = new int[n];
for(int i=0; i<n; i++){
arr[i] = Integer.parseInt(br.readLine());
}
int max = Integer.MIN_VALUE;
for(int i=0; i<n; i++){
int num = arr[i];
int cnt = 0;
for(int j=num; j<num+5; j++){
for(int z=0; z<n; z++){
if(arr[z] == j) cnt++;
}
}
max = Math.max(max, cnt);
}
System.out.println(5- max);
}
}
댓글남기기