개요와 목적
코딩 테스트 대표적인 자바 배열 문제들을 풀어보고,
배열의 문제 풀이 방식에 대해서 알아본다.
뒤집은 소수 구하기(소수와 수 뒤집기 알고리즘 이해)
9 32 55 62 20 250 370 200 30 100
풀이
수를 먼저 뒤짚은 값을 구하고 prime인지 확인하는 메소드를 실행하디.
import java.util.Scanner;
public class 뒤짚은소수 {
//소수인지 판별하는 메소드 소수라면 true를 반환 한다.
public static boolean isPrime(int num) {
if(num==1) return false;
for(int i=2; i<num; i++){
if(num%i==0) return false;
}
return true;
}
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();
}
for (int tmp : arr) {
//뒤짚은 수 구하기 이 부분이 핵심이다.
int res = 0;
while (tmp > 0) {
int t = tmp % 10;
res = res * 10 + t;
tmp = tmp / 10;
}
if (isPrime(res)) {
System.out.print(res+" ");
}
}
}
}
등수 구하기
5 87 89 92 100 76
풀이
answer 배열을 생성해서 이중 for문을 돌아 자신보다 큰 수가 있으면 cnt++을 통해 자신의 성적을 구한다.
import java.util.Arrays;
import java.util.Scanner;
public class 등수구하기 {
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();
}
int[] answer = new int[n];
for(int i=0; i<n; i++){
int cnt=1;
//arr[0]부터 arr[0]~arr[4]과 비교하며 자신보다 큰 값이 있으면 등수를
//한칸씩 미룬다(cnt++)
//그 값을 해당 answer[] 인덱스 넣는다.
for(int j=0; j<arr.length; j++){
if(arr[j]>arr[i]) cnt++;
}
answer[i]=cnt;
}
System.out.println(Arrays.toString(answer));
}
임시 반장 구하기
5 2 3 1 7 3 4 1 9 6 8 5 5 2 4 4 6 5 2 6 7 8 4 2 2 2
풀이
i =1,2,3,4,5 배열의 k 번째 값(arr[i][k])과 각 j의 1,2,3,4,5 k번 째 값중(arr[j][k]에 같은 것이 있는 지 확인한다.
즉 a[1][k]는→ a[1][k], a[2][k], a[3][k], a[4][k], a[5][k 와 비교해 같은 값이 있는 지 찾고 찾을 수만큼 cnt 표시를 한다.
한번 같은 반인 것을 확인 했으면 i번과 j의 같은 값 찾는 것을 그만한다.
3번 학생과 4번 학생이 2학년에서 같아서 cnt++해주었는데, 3학년까지 같아서 cnt++ 또 해주면 안되기 때문이다.
import java.util.Arrays;
import java.util.Scanner;
public class 임시반장구하기 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n + 1][6];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 5; j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.println(Arrays.deepToString(arr));
for (int[] ints : arr) {
System.out.println(Arrays.toString(ints));
}
int answer = 0, max = 0;
for (int i = 1; i <= n; i++) {
int cnt = 0;
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= 5; k++) {
if (arr[i][k] == arr[j][k]) {
cnt++;
//한번 같은 반 되었으면 그만 센다. 3번학생과 4번 학생이 2학년에서 같아서 cnt++
//해주었는데, 3학년까지 같아서 cnt++ 또해주면 안되니깐
//i번 j번 학생이 같은 것을 한번 확인 했으면 break 걸어준다.
break;
}
}
}
if (cnt > max) {
max = cnt;
answer = i;
}
}
System.out.println(answer);
}
}
멘토링
4 3 3 4 1 2 4 3 2 1 3 1 4 2
풀이
import java.util.Scanner;
public class 멘토링 {
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
int m=kb.nextInt();
int[][] arr=new int[m][n];
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
arr[i][j]=kb.nextInt();
}
}
System.out.println(solution(n,m,arr));
}
public static int solution(int n, int m, int[][] arr) {
int answer = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int cnt = 0;
for (int k = 0; k < m; k++) {
int pi = 0, pj = 0;
for (int s = 0; s < n; s++) {
if (arr[k][s] == i) {
pi = s;
}
if (arr[k][s] == j) {
pj = s;
}
}
if (pi<pj) cnt++;
}
if (cnt == m) {
answer++;
}
}
}
return answer;
}
}
'자바 자료구조 알고리즘 > 문자열 & 배열 & 투포인터 & 정렬' 카테고리의 다른 글
코딩 테스트 Java 정렬 문제 풀이 (0) | 2023.05.06 |
---|---|
코딩테스트 Java 투 포인터 문제 풀이 (0) | 2023.05.03 |
코딩 테스트 Java 문자열 문제 풀이 (0) | 2023.04.24 |