1단계 : 10807번 / 개수 세기
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] array = new int[n];
for (int i = 0; i<n; i++){
array[i] = sc.nextInt();
}
int v = sc.nextInt();
int count = 0;
for (int i=0; i<n; i++){
if(array[i] == v){
count ++;
}
}
System.out.println(count);
}
}
* 배열 원소를 탐색 -> v와 동일한 값 카운트하기
2단계 : 10871번 / X보다 작은 수
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
int[] A = new int[n];
for(int i=0; i<n; i++){
A[i] = sc.nextInt();
}
for(int i=0; i<n; i++){
if(A[i] < x){
System.out.print(A[i]+" ");
}
}
}
}
* 배열 원소를 탐색 -> x보다 작은값 출력
3단계 : 10818번 / 최소, 최대
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] A = new int[n];
for(int i=0; i<n; i++){
A[i] = sc.nextInt();
}
int max = A[0]; // 초기값 설정
int min = A[0]; // 초기값 설정
for(int i=0; i<n; i++){
if (A[i] > max){
max = A[i];
}
if (A[i] < min){
min = A[i];
}
}
System.out.println(min + " " + max);
}
}
* 배열 탐색 -> 최솟값, 최댓값 비교
4단계 : 2562번 / 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int[] A = new int[9];
for(int i=0; i<9; i++){
A[i] = sc.nextInt();
}
int max = A[0]; // 초기값 설정
int row = 1;
for(int i=0; i<9; i++){
if (A[i] > max){
max = A[i];
row = i + 1;
}
}
System.out.println(max);
System.out.print(row);
}
}
// 틀린 초기값 설정
int max = A[0];
int row = 0;
// 최댓값이 몇번째 줄인지를 나타내는 변수 row의 초기값을 0으로 한다면,
// 최댓값이 가장먼저 입력되는 경우, row의 최종 출력값이 0이 되게 된다.
/*
입력값
9 8 7 6 5 4 3 2 1
출력값
9 0
기대값
9 1
*/
// 따라서 아래와 같이 초기값 설정을 변경해야 한다.
// 변경한 초기값 설정
int max = A[0];
int row = 1;
5단계 : 5597번 / 과제 안 내신 분..?
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int[] A = new int[28]; // 제출자 명단
boolean[] B = new boolean[31]; // 체크 배열 // bboolean 배열의 초기값은 false
B[0] = true; // 출석번호 0은 없음으로 예외 처리
for(int i=0; i<28; i++){
A[i] = sc.nextInt();
B[A[i]] = true;
}
for(int i=0; i<31; i++){
if (B[i] == false){
System.out.println(i);
}
}
}
}
* boolean 배열을 활용하여 제출자 출석번호와 동일한 index의 원소를 false => true로 변경
false인 원소의 인덱스만 출력
6단계 : 3052번 / 나머지
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int[] A = new int[10];
boolean[] B = new boolean[42];
for(int i=0; i<10; i++){
int a = sc.nextInt();
B[a%42] = true;
}
int count = 0;
for(int i=0; i<42; i++){
if (B[i] == true){
count ++;
}
}
System.out.println(count);
}
}
// 0~41까지 수의 존재여부를 저장할 배열 생성
boolean[] B = new boolean[42];
// 원소가 true인 것의 갯수를 세어 문제 해결
7단계 : 1546번 / 평균
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double[] a = new double[n];
double max = 0;
for(int i = 0; i<n; i++){
a[i] = sc.nextDouble();
if(a[i]>max){max = a[i];}
}
double sum = 0;
for(int i = 0; i<n; i++){
a[i] = a[i] / max * 100;
sum += a[i];
}
System.out.println(sum / n);
}
}
* 평균 값이 소수점이 나와야 하므로 double 자료형을 사용하는 것
8단계 : 8958번 / OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String A;
int score = 0; // 총 점수
int plus = 1; // 더하는 점수
sc.nextLine(); // 입력 버퍼를 비워주는 역할
for (int i=0; i<n; i++){
A = sc.nextLine();
char[] B = A.toCharArray();
for (int j=0; j<B.length; j++){
if (B[j] == 'O'){score += plus; plus++;}
else {plus = 1;}
}
System.out.println(score);
score = 0; plus = 1;
}
}
}
1. String 자료형 A에 입력받은 문자열을 Char형 배열 B에 한글자씩 넣을 수 있는가 / toCharArray() 함수 사용
2. nextLine() 함수의 "nextLine(엔터키)을 입력하지 않았는데 넘어가는 이유"를 해결할 수 있는가
=> 다른 입력함수와 nextLine() 입력함수 사이에 "sc.nextLine();" 과 같이 의미없는 문장을 넣어 입력 버퍼를 비워주도록 한다.
9단계 : 4344번 / 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
[각 케이스 안에서의 평균 비교 / 케이스 마다 각각의 평균 존재 , 케이스 안에서 몇퍼센트가 평균을 넘는가.]
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int C = sc.nextInt();
for (int i=0; i<C; i++){
int N = sc.nextInt();
int[] score = new int[N];
int sum = 0;
for (int j=0; j<N; j++){
score[j] = sc.nextInt();
//test
// System.out.println(score[j]);
sum += score[j];
}
double avg = (double) sum/N;
int count = 0;
for(int j=0; j<N; j++){
if(score[j]>avg){count ++;}
// test
// System.out.println(score[j]);
}
double percent = ((double)count / (double)N)*100;
// test
// System.out.println("sum :"+sum+" avg : "+avg+" N :"+ N + " count : "+ count +" percent : "+percent);
System.out.println(String.format("%.3f", percent) + "%");
}
}
}
1. 테스트 케이스 C 속에 각 케이스속 학생의 수 N명의 성적을 배열을 통해 입력 받는다.
2. 학생의 성적을 평균을 구한 후, 학생 성적 배열을 탐색하여 평균보다 높은 학생의 수를 count한다.
3. 출력을 위한 percent 변수 작업 후 String.format() 함수를 사용해 출력 양식에 맞춘다.
cf) 형변환 , 소수점 반올림
// int -> double 형 변환
int a = 10;
double b = (double) a;
// 소수점 반올림
String.format(%.3f, a);
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
백준 - 단계별로 풀어보기 - JAVA (6단계 : 문자열 / 10문제) (2022.12.25 일) (0) | 2022.12.25 |
---|---|
백준 - 단계별로 풀어보기 - JAVA (5단계 : 함수 / 3문제) (2022.12.25 일) (1) | 2022.12.25 |
백준 - 단계별로 풀어보기 - JAVA (3단계 : 반복문 / 12문제) (2022.12.23 금) (0) | 2022.12.23 |
백준 - 단계별로 풀어보기 - JAVA (2단계 : 조건문 7문제) (2022-12-22 목) (0) | 2022.12.22 |
백준 - 단계별로 풀어보기 - JAVA (1단계 : 입출력과 사칙연산 / 14문제) (2022.12.22 목) (1) | 2022.12.22 |