PS/baekjoon

(Python) 단계별로 풀어보기 - 일차원 배열

moo.choi 2020. 11. 30. 00:41

일차원 배열

목차

최소, 최대

난이도 : Bronze III

  • 문제

    N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

  • 입력

    첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

  • 풀이

    N = int(input())
    numList = list(map(int, input().split()))
    print(min(numList), max(numList))
    • min(), max()를 통해 List에서 최소값, 최대값을 찾을 수 있다.

최댓값

난이도 : Bronze II

  • 문제

    9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.

    예를 들어, 서로 다른 9개의 자연수

    3, 29, 38, 12, 57, 74, 40, 85, 61

    이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

  • 입력

    첫 째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

  • 풀이

    idx, maxNum = 0, 0
    for i in range(1, 10):
      num = int(input())
      if num > maxNum:
        idx, maxNum = i, num
    print(f'{maxNum}\n{idx}')
    • 이전까지의 index에서 가장 큰 값보다 현재 값이 클경우 idxmaxNum을 변경해주었다.

숫자의 개수

난이도 : Bronze II

  • 문제

    세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

    예를 들어 A = 150, B = 266, C = 427 이라면

    A × B × C = 150 × 266 × 427 = 17037300 이 되고,

    계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

  • 입력

    첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

  • 풀이

    N = 1
    result = [0]*10
    for _ in range(3):
      N *= int(input())
    for num in str(N):
      result[int(num)] += 1
    for i in range(10):
      print(result[i])
    • 세 숫자의 곱셈을 계산한 후
    • 각 자리수의 인덱스 위치에 Count를 1 씩 늘려주었다.

나머지

난이도 : Bronze II

  • 문제

    두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.

    수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

  • 입력

    첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

  • 풀이

    result = set()
    for _ in range(10):
      result.add(int(input()) % 42)
    print(len(result))
    • set()을 사용하면 중복되는 값을 없앨 수 있다.

평균

난이도 : Bronze I

  • 문제

    세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

    예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

    세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

  • 입력

    첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

  • 풀이

    N = int(input())
    scores = list(map(int, input().split()))
    maxNum = max(scores)
    for i in range(N):
      scores[i] *= 100 / maxNum / N
    print(sum(scores))
    • 각 index 위치의 점수에 100 / (maxNum * N) 을 곱해준 후 모든 인덱스의 값을 더해주었다.

OX퀴즈

난이도 : Bronze II

  • 문제

    "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

    "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

    OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

  • 입력

    첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

  • 풀이

    T = int(input())
    for _ in range(T):
      quiz = input()
      answer, cnt = 0, 0
      for ox in quiz:
        if ox == 'O':
          cnt += 1
          answer += cnt
        else:
          cnt = 0
      print(answer)
    • O 일 경우 count를 1씩 증가시켜주고 count를 answer에 더해주었다.
    • X 일 경우 count를 0으로 초기화해준다.

평균은 넘겠지

난이도 : Bronze I

  • 문제

    대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

  • 입력

    첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

    둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

  • 풀이

    T = int(input())
    for _ in range(T):
      N, *scores = map(int, input().split())
      average = sum(scores) / N
      result = 0
      for score in scores:
        if score > average:
          result += 1
      result = str(round(result / N * 100, 3)).split('.')
      result[1] += '0' * (3 - len(result[1]))
      print('.'.join(result) + '%')
    • 소수점 부분을 신경 써줘야한다.
    • round(number, 소수점 아래 자리수) 를 써서 반올림해줄 수 있다.
    • . 을 기준으로 나눠준 후 소수점 뒤의 길이가 3이 되지않을 경우 0을 더 붙여주었다.