Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

문제

HackerLand 대학은 아래와 같은 학점 정책을 가지고 있다.
  • 모든 학생은 0부터 100 사이의 점수를 가진다.
  • 학점이 40점 이상이라면 과락이다.
이 대학의 대학교수인 샘은 아래와 같이 점수에 대한 올림 정책을 만들어서 학생들의 점수를 평가한다.
  1. 해당 점수의 다음 5 배수 점수와의 차이가 3보다 작다면, 이 점수는 다음 점수의 5배수로 올림을 한다.
  2. 만약 학점이 38 보다 작다면, 과락이 된다. 38 이상이면, 1의 정책에 의해서 40점이 되고 과락을 면할 수 있기 때문이다.
예를 들어 학점 == 84라면 85 - 84 < 3 이므로 85점이 된다. 학점 == 29라면, 올림을 해서 30이 되더라도 40보다 작으므로 과락이다.

샘은 학생의 점수를 입력 받아서 위의 정책에 따라서 점수를 보정하는 소프트웨어를 개발하려고 한다.

입력 포맷

  1. 첫번째 표준입력으로 학생의 수 n을 입력한다.
  2. 학생의 수 만큼 점수를 입력 한다.

제한 조건

  • 점수는 0 ~ 100 사이 값을 가진다.
  • 입력 받는 점수의 갯수 n은 1 ~ 60 사이의 값을 가진다.

입력 예제

4
73
67
38
33

출력 예제

75
67
40
33

풀이

표준입력 버전

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

func collectGrade(a []int) {
    for _, v := range a {
        if v%5 < 3 || v < 38 {
            fmt.Println(v)
        } else {
            fmt.Println(v + (5 - (v % 5)))
        }
    }
}
func main() {
    reader := bufio.NewReader(os.Stdin)
    n, _, _ := reader.ReadLine()
    ni, _ := strconv.Atoi(string(n))
    ar := make([]int, ni)
    for i := 0; i < ni; i++ {
        grade, _, _ := reader.ReadLine()
        gradei, _ := strconv.Atoi(string(grade))
        ar[i] = gradei
    }
    collectGrade(ar)
}

순수 알고리즘 버전

package main

import (
    "fmt"
)

func collectGrade(a []int) {
    for _, v := range a {
        if v%5 < 3 || v < 38 {
            fmt.Println(v)
        } else {
            fmt.Println(v + (5 - (v % 5)))
        }
    }
}
func main() {
    collectGrade([]int{4,73,67,38,33})
}
		

Python 버전

#!/usr/bin/python

def collectGrade(arg):
    for grade in arg:
        if grade < 38:
            print grade
        elif (grade % 5) > 2:
            print grade - (grade%5) + 5
        else:
            print grade

collectGrade([73, 67, 38, 33, 62])