일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Algorithm
- Blog
- Bookmark
- JavaScript
- Django
- 프로젝트
- 장고 프로젝트
- 예술영화추천
- passport.js
- 북마크만들기
- MyPick31
- 타사인증
- join()
- 장고 개발 순서
- MYSQL
- 독립영화플랫폼
- python
- 알고리즘
- 개발
- til
- 장고 프로젝트 순서
- 자바스크립트
- Node.js
- 파이썬 웹프로그래밍 장고
- 장고
- 북마크앱
- mongodb
- ART_Cinema
- Django Blog
- Exercism
Archives
- Today
- Total
Juni_Dev_log
(인프런) 파이썬 알고리즘 문제1-4 "대표값" 본문
Problem
대표값 N명의 학생의 수학점수가 주어집니다.
N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세요.
평균과 가장 가까운 점수가 여러 개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고, 높은 점수를 가진 학생이 여러 명일 경우 그 중 학생번호가 빠른 학생의 번호를 답으로 합니다.
▣ 입력설명
첫줄에 자연수 N(5<=N<=100)이 주어지고, 두 번째 줄에는 각 학생의 수학점수인 N개의 자연수가 주어집니다. 학생의 번호는 앞에서부터 1로 시작해서 N까지이다.
▣ 출력설명
첫줄에 평균과 평균에 가장 가까운 학생의 번호를 출력한다. 평균은 소수 첫째 자리에서 반올림합니다.
▣ 입력예제
10
45 73 66 87 92 67 75 79 75 80
▣ 출력예제
74 7
예제설명) 평균이 74점으로 평균과 가장 가까운 점수는 73(2번), 75(7번), 75(9번)입니다. 여기서 점수가 높은 75(7번), 75(9번)이 답이 될 수 있고, 75점이 두명이므로 학생번호가 빠른 7번이 답이 됩니다.
💯 Solution ①
: Only My Thinking (어려워서 설명듣고 풀었음)
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
32
|
# 파일에서 값을 가져옴
import sys
# 채점을 할 때는 아래 코드 주석 처리
sys.stdin=open("input.txt", "rt")
# n명의 학생 수
n=input()
# 학생들의 점수를 리스트형식으로 가져온다.
n_list=list(map(int,input().split()))
# 학생들의 평균 점수 / 소수 첫째 자리에서 반올림
average_score=round(sum(n_list)/len(n_list))
min=float('inf')
# 순서가 중요하기 때문에, sort()를 할 수 없음
for idx, x in enumerate(n_list):
# 평균에서 해당값까지의 거리 : 절댓값 abs()사용
tmp = abs(x-average_score)
# 최솟값보다 tmp가 작다면
if tmp<min:
min=tmp
# score에 해당 값을 넣는다.
score=x
# res는 해당 순서
res=idx+1
# tmp값과 최솟값이 같다면
elif tmp==min:
# score값보다 현재 값이 크다면
if x>score:
score=x
res=idx+1
print(average_score, res)
|
cs |
- 평균을 구하고, 최솟값으로 min을 설정한다. (float('inf'))
- enumerate() 사용
- abs() : 절댓값으로 평균과의 거리 구하기
- 평균값과 평균에서 가까운 값의 순서를 print한다.
💯 Solution ②
: Tutor advice
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
32
33
34
35
36
|
#Tip)
# 파일에서 값을 가져옴
import sys
# 채점을 할 때는 아래 코드 주석 처리
sys.stdin=open("input.txt", "rt")
# n명의 학생 수
n=int(input())
# 학생들의 점수를 리스트형식으로 가져온다.
a=list(map(int,input().split()))
# round():소수 첫째 짜리에서 반올림
ave=round(sum(a)/n)
# 최솟값으로 설정할 변수와 큰 값을 초기화값으로 입력한다.
min=float('inf')
# idx : 학생 번호 / enumerate(a) : idx에는 인덱스 값을 넣고, x에는 값을 넣는다.
for idx, x in enumerate(a):
# 평균과 학생의 값과의 거리를 구해야함
tmp=abs(x-ave)
if tmp<min:
min=tmp
# 거리가 같을 떄는 큰 점수로 해야함
score=x
# 평균과 가장 가까운 점수의 학생의 인덱스 번호 => res
# idx에 1을 더해야 인덱스번호
res=idx+1
# 이전 값(min)과 tmp가 같다면, x(현재값) > score(이전값)이라면, x를 score로 할당하고, idx번호를 변경한다.
elif tmp==min:
if x>score:
score=x
res=idx+1
print(ave, res)
|
cs |
📚 참고
'CodingTest > 인프런 (Algorithm)' 카테고리의 다른 글
(인프런) 파이썬 알고리즘 문제1-6 "자릿수의 합" (0) | 2021.02.17 |
---|---|
(인프런) 파이썬 알고리즘 문제1-5 "정다면체" (0) | 2021.02.16 |
(인프런) 파이썬 알고리즘 "최솟값 구하기" 개념정리 (0) | 2021.02.13 |
(인프런) 파이썬 알고리즘 문제1-3 "K번째 큰 수" (0) | 2021.02.13 |
(인프런) 파이썬 알고리즘 문제1-2 "K번째 수" (0) | 2021.02.11 |
Comments