Hayden's Archive
[알고리즘] 백준 8958번 : OX퀴즈 / 백준 4344번 : 평균은 넘겠지 본문
알고리즘 문제 출처 https://www.acmicpc.net/problem/8958
내가 작성한 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n; i++) {
int count = 0;
int total = 0;
String ox = sc.next();
for(int j=0; j<ox.length(); j++) {
if(ox.charAt(j)=='X') {
count = 0;
continue;
}
count += 1;
total += count;
}
System.out.println(total);
}
}
}
알고리즘 문제 출처 https://www.acmicpc.net/problem/4344
반올림을 할 때 Math.round()를 통해 하면 정수형으로 반환되므로 String.format()을 이용하는 것이 좋다. Math.round()도 잘 활용하면 응용이 가능한데 이 때 소수점 자리수를 맞추기 위해 0.001과 같이 곱하면 예상치 못한 이상한 숫자가 나오기도 한다.(부동 소수점 방식 때문인 듯.) double형으로 캐스팅해서 나누는 것이 낫고 String,format()을 사용하는 게 제일 편하다.
(참고 : https://blog.naver.com/zzang9ha/221969206688 )
내가 작성한 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n; i++) {
int m = sc.nextInt();
int[] score = new int[m];
double count = 0;
double mean = 0;
for(int j=0; j<m; j++) {
score[j] = sc.nextInt();
mean += score[j];
}
mean = mean/m;
for(int j=0; j<m; j++) {
if(score[j]>mean) {
count+=1;
}
}
System.out.println(String.format("%.3f", count/m*100)+"%");
}
}
}