Hayden's Archive

[알고리즘] 백준 8958번 : OX퀴즈 / 백준 4344번 : 평균은 넘겠지 본문

Algorithm

[알고리즘] 백준 8958번 : OX퀴즈 / 백준 4344번 : 평균은 넘겠지

_hayden 2020. 6. 3. 14:03

알고리즘 문제 출처 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)+"%");
		}
	}
}