티스토리 뷰
문제의 난이도가 딱히 어렵진 않았으나
이상한 실수 하나로
거의 모든 문장을 로그 찍어 확인하며
삽질하다 풀어서 조금은 짜증나는 문제였다ㅋㅋ
(이상한 삽질은 아래에서 공개..)
우선 바로 코드로 들어가보자.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Q1546 {
public static void main(String[] args) throws IOException {
// 점수 중 최댓값(M)선택
// 모든 점수를 점수(score)/M*100으로 고침.
// 위 방법으로 계산 후 새로운 평균 출력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
double[] arr = new double[N];
double M=0;
double sum=0;
double score = 0;
for (int i = 0; i < N; i++) {
score = Integer.parseInt(st.nextToken());
if(score>M) {
M=score;
}
arr[i]=score;
}
for(int i=0; i<N; i++) {
double newNum = arr[i]/M*100;
arr[i]=(newNum);
sum += (double)(arr[i]);
}
System.out.println(sum/N);
}
}
원래 코드 공유를 할 때,
주석은 지우고 올리는 반면,
이번 문제는 내가 문제를 읽으며
생각하는 방식과 함께 설명하기 위해
주석도 첨부했다.
우선 나는 이 문제를 읽으면서
바로 주석의 내용으로 문제를 정리했다.
⭐ 내가 문제를 푸는 방식
먼저
우선 지정된 변수가 많아
처음에 변수명을 이해하기 쉽도록 정리했다.
두 번째로
문제에서 점수를 어떻게 수정하는 지는
식으로 무조건 활용할 것 같아서
주석에서 바로 식으로 정리해두었다.
(문제를 이해하면서 바로 식으로 작성해두는 것은
시간 단축은 물론이고, 문제 이해 및
코드를 작성할 때도 방향을 잡을 수 있어서
추천하는 방법이다!)
세 번째로
입력 데이터와 출력 데이터를
주석으로 정리해두고
문제의 흐름을 잡는다.
지금처럼 단순한 문제의 경우
변수명이나 입 출력 값들이
그렇게 많지 않지만,
나중에 어려운 문제를 풀다 보면
헷갈리는 경우가 분명히 발생할 것 같아
습관을 들이는 중이다.
자 이제 주석을 통해
문제에 대한 이해도를 높였으니
코드 해석을 해보자.
먼저 입력받은 N번만큼
for문을 돌면서 arr에 값을 하나씩 넣고,
최고 점수 값(M)을 찾자.
그다음
두 번째 for 문을 돌면서
newNum 변수에 위에 주석으로 작성한
수식을 대입하자!
그러면 arr[]에는 수정한 점수 값이 들어갈 것이고,
sum 변수에는 수정한 점수값의 합이 들어갈 것이다.
최종적으로 출력해야 할 결과값은
수정한 점수들의 평균이므로,
sum/N을 출력해준다.
🤔 궁금하지 않을 수도 있지만 필자가 해맸던 부분은
분명 문제에 주어진 수식에서도
새로 수정하는 점수의 식은
score/M*100라고 말해줬는데,
자꾸 출력값에 오차가 생겼다.
처음에는 출력값만 double형으로
바꾸어 주면 되는 줄 알고
코드를 수정했는데,
여전히 평균(출력값)에 오차가 있길래
전체 문장을 로그로 찍어 확인해보니
멍청한 실수를 했다.
바로 score/M 부분이 둘 다 정수이다보니
무조건 0으로 찍힌것!
그래서 모든 변수를 double로 수정해 해결했다.
독자들은 필자처럼 멍청한 실수를 하지 않기를 바란다!
자 그럼 이제
실행결과를 보자.
실행결과
이번 문제도 딱히 어렵진 않은 문제였다.
(필자의 멍청이 실수만 제외하면,,)
문제를 보다 이해가 안되거나 설명이 이상한 부분이 있으면 댓글을 활용해주길 바란다.
'코딩테스트 > 백준 자바' 카테고리의 다른 글
[코딩테스트] 백준 자바 4344번 (0) | 2022.03.21 |
---|---|
[코딩테스트] 백준 자바 8958번 (0) | 2022.03.21 |
[코딩테스트] 백준 자바 3052번 (0) | 2022.03.18 |
[코딩테스트] 백준 자바 10818번 (0) | 2022.03.14 |
[코딩테스트] 백준 자바 10951번 (0) | 2022.03.09 |
- Total
- Today
- Yesterday
- 디버깅
- stack
- hackerrank
- 개발자
- 그리디
- 해커랭크 자바
- LinkedList
- queue
- 정보처리 산업기사
- BAEKJOON
- Java
- 백준
- challenges
- 22 정보처리 산업기사
- 해커랭크 자바 챌린지
- 정보처리산업기사 공부법
- 챌린지
- 해커랭크 챌린지
- 해커랭크
- 정보처리산업기사
- ORM
- 자바의 정석
- 소스코드
- 22 정보처리산업기사
- 강의
- 코드
- 자바
- 풀이
- JPA
- hackerrank challenges
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |