BaekJoon Oline Judge - Step 4
if문 기초!
//9498. 시험 성적
/* Scanner scan = new Scanner(System.in);
int score = scan.nextInt();
if(score <= 100 && score >= 90)
System.out.println("A");
else if (score <= 89 && score >= 80)
System.out.println("B");
else if (score <= 79 && score >= 70)
System.out.println("C");
else if (score <= 69 && score >= 60)
System.out.println("D");
else
System.out.println("F"); */
//10817. 세 수
//배열을 추가적으로 사용하기 때문에 if문만 사용하는 것보다 메모리를 상대적으로 더 차지하는 대신 코드의 길이는 줄일 수 있다.
/* Scanner scan = new Scanner(System.in);
int num1 = scan.nextInt();
int num2 = scan.nextInt();
int num3 = scan.nextInt();
int tmp;
int[] compare = {num1, num2, num3};
for(int i=0; i<2; i++) {
for(int j=i+1; j<3; j++) {
if(compare[i] > compare[j]) {
tmp = compare[i];
compare[i] = compare[j];
compare[j] = tmp;
}
}
}
System.out.println(compare[1]); */
//10871. X보다 작은 수
/* Scanner scan = new Scanner(System.in);
int A = scan.nextInt(); //받을 숫자의 수
int X = scan.nextInt(); //x보다 작은 수 출력
int[] compare = new int[A];
//수 입력받기
for(int i=0; i<A; i++){
compare[i] = scan.nextInt();
}
//X보다 작으면 출력, 커지만 break;
for(int i=0; i<A; i++) {
if(compare[i] < X) {
System.out.print(compare[i] + " ");
}
else
continue;
} */
//1546. 평균
/* Scanner scan = new Scanner(System.in);
int N = scan.nextInt(); //과목 수
float[] compare = new float[N];
//성적 입력받기
for(int i=0; i<N; i++){
compare[i] = scan.nextInt();
}
//최대값 찾기
float tmp;
for(int i=0; i<N-1; i++) {
for(int j=i+1; j<N; j++) {
if(compare[i] > compare[j]) {
tmp = compare[i];
compare[i] = compare[j];
compare[j] = tmp;
}
}
}
float M = compare[N-1];
float avg = 0;
for(int i=0; i<N; i++) {
compare[i] = compare[i] / M * 100;
avg = compare[i] + avg;
}
System.out.println(avg / N); */
4344. 평균은 넘겠지
List<Float> per = new ArrayList<Float>();
Scanner scan = new Scanner(System.in);
//케이스 수
int C = scan.nextInt();
//케이스마다 돌기
for(int i=0; i<C; i++) {
int N = scan.nextInt(); //과목 수
int sum = 0; //과목 총 점수의 합
int[] score = new int[N]; //점수
int cnt = 0; //평균을 넘는 사람의 수
float avg = 0; //평균
//성적 입력
for(int j=0; j<N; j++) {
score[j] = scan.nextInt();
sum = sum + score[j];
}
//평균을 넘는 학생의 수 찾기
avg = (float) sum / N;
for(int k=0; k<N; k++) {
if(score[k] > avg) {
cnt++;
}
}
float result = ((float)cnt/N)*100;
per.add(result);
}
//% 출력하기
for(int i=0; i<per.size(); i++) {
System.out.println(String.format("%.3f", per.get(i)) + "%");
}
입력
테스트 케이스 수 C를 먼저 입력받은 후 C 만큼 반복문 돌려서 과목수 N 입력받기 (i)
입력받은 N만큼 반복문 돌려서 N명의 점수 입력받기 (j)
% 계산
[총합, 평균, 평균을 넘는 사람의 수]는 [평균을 넘는 학생의 %(result)]를 찾고 나면 0으로 초기화 해주거나, 새로운 값을 넣어준다.
값을 일일이 초기화 해줬는데 생각해보니 result처럼 새로 계산 된 값을 바로 넣어줘도 될 것 같음.
%는 float result = ((float)cnt/N)*100; 이렇게 구해주면 됨! (평균을 넘는 학생의 수 / 학생의 수 N) * 100
그리고 이 result 값을 ArrayList에 add해주고 나중에 반복문 돌려서 출력하면 된다.
1110. 더하기 사이클
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String N = scan.nextLine();
int cnt = 0;
String[] plusNum;
String first = null;
//처음 생성 수(first) 만들기
if(Integer.valueOf(N) < 10) {
N = "0" + N;
}
String[] num = N.split("");
String plusVal = String.valueOf(Integer.valueOf(num[0]) + Integer.valueOf(num[1]));
if(Integer.valueOf(plusVal) < 10) {
plusVal = "0" + plusVal;
}
plusNum = plusVal.split("");
N = num[1] + plusNum[1];
first = N;
cnt++;
//first와 같아질 때 까지 cnt++하면서 계속 반복문 돌리기
while(true) {
num = N.split("");
plusVal = String.valueOf(Integer.valueOf(num[0]) + Integer.valueOf(num[1]));
if(Integer.valueOf(plusVal) < 10) {
plusVal = "0" + plusVal;
}
plusNum = plusVal.split("");
N = num[1] + plusNum[1];
//first와 다를 경우 계속 반복문
if(!first.equals(N)) {
cnt++;
}
//같을 경우에는 반복문 벗어나기
else {
break;
}
}
System.out.println(cnt);
}
}
first를 구하는 코드랑 while문 내에서 도는 내용이랑 비슷해서 합치고 싶었는데 귀찮아서 그냥 채점해 버렸다..
대충 로직 정리해 보자면,
1. 문자열 N을 입력받는다.
2. 입력받은 수가 10보다 작을 때 앞에 0을 붙여준다. ex) 4 -> 04
3. split 한 후 배열에 넣는다. ex) 14 -> 배열에 1, 4 각각 넣어줌
4. 배열 index 0, 1을 더한다 ex) [0] = 1, [1] = 4 일 때, 1 + 4 = 5
5. 더한 수가 10보다 작을 때 잎에 0을 붙여준다.
6. 더한 수를 split 한 후 배열에 넣는다.
7. 문자열로 원래 배열의 index[1]과 더한 배열의 index[1]을 문자열로 더한다.
=> first 생성!
이제 이 first를 N에 넣고 반복문을 돌려 [[first와 새로 생성된 N이 같아질 때 까지 count를 증가하며]] 위와 같은 과정을 계속 반복한다.
[+] 궁금해서 다른 풀이들을 찾아봤는데, %, / 사용해서 10의자리 1의자리를 나누어 풀 수도 있는 것 같다.
이 경우 코드가 굉장히 짧아졌다...!
'CS > Baekjoon' 카테고리의 다른 글
[Algorithm] 백준 단계별로 풀어보기 - 단계 7. 문자열 (0) | 2019.04.17 |
---|---|
[Algorithm] 백준 단계별로 풀어보기 - 단계 6 (0) | 2019.04.16 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 5 (0) | 2019.04.15 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 3 (0) | 2019.03.30 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 1, 2 (0) | 2019.02.20 |