일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SQL 문법
- 스파크
- 빅데이터
- 문법
- 스프링
- 파이썬
- 백준
- 스프링부트
- 엘라스틱서치
- 프로그래밍
- 코딩테스트
- 알고리즘
- 토이프로젝트
- 위클리챌린지
- 이클립스
- 프로그래머스
- 데이터프로그래밍
- 데이터베이스
- 문제풀이
- 해킹실습
- 기초
- SQL
- 모의해킹
- MySQL
- 자바
- 필기
- SQL 정리
- c언어
- 리눅스마스터 2급 2차
- 오라클
- Today
- Total
개발일기
백준 2822번 JAVA 풀이 - 점수 계산 본문
문제 링크 : https://www.acmicpc.net/problem/2822
2822번: 점수 계산
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문
www.acmicpc.net
문제
상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다.
상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오.
입력
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다.
출력
첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.

# 문제 풀이
해당 문제는 8문제에 대한 점수 입력이라고 정해져 있으며 모든 문제에 대한 점수가 다르기 때문에
반복문을 돌려 index를 찾아가는 방법으로 문제를 해결하면 된다.
1. 8칸의 int형 배열을 만들어 준 후 반복문을 통해 하나씩 배열에 넣는다.
for(int i = 0; i < score.length; i++){
score[i] = sc.nextInt();
}
2. sort를 하여 가장 큰 점수 5개를 구하게 될텐데 이때 sort를 하게 되면 큰 값들에 대해 index를 구하지 못하게 된다
따라서 얕은 복사 보다는 깊은 복사를 하여 두개의 배열이 따로 작용할 수 있도록 clone 메소드를 사용한다.
int[] temp = score.clone();
Arrays.sort(score);
3. 정렬한 score 배열을 역순으로 5개 totalScore 변수에 더해 총합을 구해준 후 깊은 복사를 했던 temp 배열을 findIndex 함수로 전달하여 index를 출력, 새로운 5칸의 배열에 넣는다.
for(int i = score.length-1; i >= 3; i--){
totalScore += score[i];
checkQ[idx] = findIndex(temp, score[i]);
idx++;
}
4. findIndex 함수는 int형 배열과 score의 인자를 통해 score가 몇 번째 index에 있는지 판단하는 함수이다.
static int findIndex(int[] arr, int score){
for(int i = 0; i < arr.length; i++){
if(score == arr[i]) return i + 1;
}
return -1;
}
# 전체 코드
import java.util.*;
public class Main_2822{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] score = new int[8];
int[] checkQ = new int[5];
int totalScore = 0;
int idx = 0;
for(int i = 0; i < score.length; i++){
score[i] = sc.nextInt();
}
int[] temp = score.clone();
Arrays.sort(score);
for(int i = score.length-1; i >= 3; i--){
totalScore += score[i];
checkQ[idx] = findIndex(temp, score[i]);
idx++;
}
System.out.println(totalScore);
Arrays.sort(checkQ);
for(int i = 0; i < checkQ.length; i++){
System.out.print(checkQ[i] + " ");
}
}
static int findIndex(int[] arr, int score){
for(int i = 0; i < arr.length; i++){
if(score == arr[i]) return i + 1;
}
return -1;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 8979번 JAVA 풀이 - 올림픽 (0) | 2022.06.08 |
---|---|
백준 4108번 JAVA 풀이 - 지뢰찾기 (0) | 2022.06.07 |
백준 2246번 JAVA 풀이 - 콘도 선정 (2) | 2022.06.05 |
백준 1969번 JAVA 풀이 - DNA (0) | 2022.06.04 |
백준 1925번 JAVA 풀이 - 삼각형 (0) | 2022.06.03 |