Hayden's Archive
[알고리즘] 백준 8958번 : OX퀴즈 / 백준 4344번 : 평균은 넘겠지 본문
알고리즘 문제 출처 https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 �
www.acmicpc.net
내가 작성한 코드
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
4344번: 평균은 넘겠지
문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 �
www.acmicpc.net
반올림을 할 때 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)+"%");
}
}
}