5단계 1차원 배열
10818번
- N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
- 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분
- 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
package step5;
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class NO_1 {
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];//입력받은 n크기의 배열 생성
// 비교할 데이터 입력
StringTokenizer st=new StringTokenizer(br.readLine()," ");
for(int i=0;i<arr.length;i++) {
arr[i]=Integer.parseInt(st.nextToken()); //배열에 값 넣어줌
}
br.close(); //입력 종료
Arrays.sort(arr); //소트 정렬 작은거 >> 큰 순
System.out.println(arr[0]+" "+arr[n-1]); //가장 큰수 배열의 끝에 위치하는 데이터 출력
}
}
2562번
- 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
- 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61이 주어지면,
- 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
package step5;
import java.io.*;
import java.util.Arrays;
public class NO_2 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int arr[]=new int[9]; //크기 9만큼의 배열 생성
int max=0; //max값 저장 공간
int number = 0; //max의 위치를 저장할 공간
int count=0;
for(int i=0;i<9;i++) {
arr[i]=Integer.parseInt(br.readLine()); //배열에 값 입력
}
for(int x:arr) {
count++;
if(x>max) { //x의 값중 가장 큰것을
max=x; //max변수에 넣음
number=count; //카운트를 통해 위치를 넘김
}
}
br.close();
System.out.println(max);
System.out.println(number);
}
}
2577번
- 세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지
- 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
- 예를 들어 A = 150, B = 266, C = 427 이라면
- A × B × C = 150 × 266 × 427 = 17037300 이 되고,
- 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
package step5;
import java.io.*;
import java.util.Arrays;
public class NO_3 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int A=Integer.parseInt(br.readLine());
int B=Integer.parseInt(br.readLine());
int C=Integer.parseInt(br.readLine());
int num=A*B*C; //입력받은 3개의 수의 합을 num에 넣음
String str=Integer.toString(num); //int형 num의 값을 string으로 캐스팅해줌
char[] arr=str.toCharArray(); //문자열 str을 char배열에 넣음
int []number=new int[10]; // 0~9까지 몇번이 나왔는지에 대한 값을 담을 배열 선언
// arr배열에 num 값 17037300 의 수가 담겼다고 가정
// 각 자리수를 구하기 위해서는 나머지(%10)을 통해서 1의 자리씩 가져와야함
// number 배열의 index를 통해서 값을 넣을 것.
// 첫번째 num%10을 통해 0이 나옴 = number[num%10] 인덱스를 의미.
// 이때 number[0] 번의 값을 ++증가 시키면 배열 0번째 즉, 0의 값이 1임을 넣게되는 것
// 증가시킨 후에는 다음 숫자를 찾기 위해 이미 추가한 첫번째 자리수를 지워야함
// 그렇기에 num의 값을 10으로 계속 나눠줘야함
for(int i=0;i<arr.length;i++) {
number[num%10]++; //나눈 값 즉, 1의 자리를 비교함 0~9중에 있는 값에 증가함
num/=10; //나머지를 뺀 다음 10으로 다시 나눔
}
for(int x:number) //배열의 값을 꺼내기 위한 반복문
System.out.println(x);
}
}
1546번
- 입력된 점수중 가장 큰값을 M
- M보다 작은점수들은 점수/M*100으로 수정 후 평균 구하기
- 첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
package step5;
import java.util.Scanner;
public class NO_4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int data=in.nextInt();
double []arr=new double[data]; //입력받은 값만큼 배열크기 지정
double max=0; //선언 및 초기화
double sum=0; //선언 및 초기화
for(int i=0;i<arr.length;i++) {
arr[i]=in.nextDouble(); //배열에 넣음과 동시에 max값을 정해줌
if(arr[i]>max)
max=arr[i];
}
for(int i=0;i<arr.length;i++) { //배열의 길이만큼 반복
arr[i]=arr[i]/max*100; //배열에 있는 값에 /max*100을 해준 후 다시 넣음
sum+=arr[i]; //모든 배열의 값을 sum변수에 더함
}
System.out.println(sum/data); //변수 갯수만큼 나눠 평균 출력
}
}
8958번
- "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
- "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
- 각 테스트 케이스마다 점수를 출력한다.
package step5;
import java.util.Scanner;
public class NO_5 {
public static void main(String[] args) {
/*
* n길이의 스트링 배열필요
*/
Scanner in=new Scanner(System.in);
int data=in.nextInt();
String arr[] =new String[data];
for(int i=0;i<data;i++) { //입력받은 데이터만큼 반복 실행
arr[i]=in.next(); //배열에 값 입력
int cnt=0; //연속으로 나오는 횟수를 체크
int sum=0; //횟수에 대한 값을 더하는 공간
for(int j=0;j<arr[i].length();j++) {
if(arr[i].charAt(j)=='O') //문자 배열 index에 있는 문자 한개를 꺼내서 체크
cnt++; //만약 O가 있으면 카운트 증가 //X가 나올때까지 증가함
else
cnt=0; //만약 X가 먼저 나온다면 cnt변화 없음 0처리
sum+=cnt; //최종적인 카운트의 값을 더함
}
System.out.println(sum); //각 index에서 가지고있는 sum값을 출력
}
in.close();
}
}
4344번
- 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
- 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
- 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다
package step5;
import java.util.Scanner;
public class NO_6 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int T=in.nextInt(); // 몇개의 케이스를 진행할 것인지
for(int i=0;i<T;i++) { //입력받은 T만큼 진행
int num=in.nextInt();
int arr [] =new int [num]; // 입력받은 수 만큼의 배열 크기 지정
int sum=0, avg=0,cnt=0; //변수 선언 및 초기화
for(int j=0;j<num;j++) { //배열의 크키만큼 반복
arr[j]=in.nextInt(); //해당 위치에 값 입력
sum+=arr[j]; //배열의 값들을 sum에 저장
}
avg=sum/num; //평균 구하기
for(int q=0;q<num;q++) {
if(arr[q]>avg) { //배열의 값이 평균보다 크다면
cnt++; //카운트 증가
}
}
double result =(double) cnt/num*100; //평균을 넘는 비율을 구하기
System.out.printf("%.3f", result); //소수점 셋째 자리 출력 (%.3f)사용
System.out.println("%");
}
in.close();
}
}
여기까지 1차원 배열에 대한 백준 알고리즘 4단계 풀이였습니다!! 처음보다 점점 어려워 짐을 느끼고 있는데요! 그래도 포기하지 않고 열심히 해보겠습니다! 제 풀이보다 더 좋은 풀이가 있거나 이해가 안가는 부분 있으시면 댓글로 남겨주세요! 감사합니다 ㅎㅎ🥰
'코딩테스트 & 알고리즘 및 기타 > 백준_알고리즘 - 단계별 풀이' 카테고리의 다른 글
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (6단계) (0) | 2021.06.01 |
---|---|
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (4단계) (0) | 2021.05.19 |
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (3단계) (0) | 2021.05.15 |
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (2단계) (0) | 2021.05.08 |
[Java, 자바] 백준 알고리즘 - 단계별 풀기 (1단계) (0) | 2021.05.08 |