728x90

(1) 문제

  • 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
    • 산술평균 : N개의 수들의 합을 N으로 나눈 값
    • 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
    • 최빈값 : N개의 수들 중 가장 많이 나타나는 값
    • 범위 : N개의 수들 중 최댓값과 최솟값의 차이
  • N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

 


(2) 입력

  • 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

 


(3) 출력

  • 첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
  • 둘째 줄에는 중앙값을 출력한다.
  • 셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
  • 넷째 줄에는 범위를 출력한다.

(4) 예제 입력 및 출력


(5) 코드

import math
import sys

length = int(sys.stdin.readline())

value_dictionary = {

}

value_list = []

for i in range(length):
    value = int(sys.stdin.readline())
    if value in value_dictionary:
        value_dictionary[value] += 1
    else:
        value_dictionary[value] = 1
    value_list.append(value)
    

sum_number = 0
max_frequency_list = []
max_frequency = 0

for number in value_dictionary:
    #덧셈 구하기
    sum_number += number * value_dictionary[number]
    
    #최빈값 구하기
    if max_frequency < value_dictionary[number]:
        max_frequency_list.clear()
        max_frequency = value_dictionary[number]
        max_frequency_list.append(number)

    elif max_frequency == value_dictionary[number]:
        max_frequency_list.append(number)
        
value_list.sort()
max_frequency_list.sort()

#산술평균
print(round(sum_number / length))
#중앙값
print(value_list[len(value_list) // 2])
#최빈값
if len(max_frequency_list) == 1:
    print(max_frequency_list[0])
else:
    print(max_frequency_list[1])
#최소, 최대 범위
print(value_list[-1] - value_list[0])

(6) 실행결과


반응형
728x90

(1) 문제

  • 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.

 


(2) 입력

  • 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

(3) 출력

  • 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.

 


(4) 예제 입력 및 출력


(5) 코드

import sys
import collections
point, line, start_point = map(int, sys.stdin.readline().split())

graph = {

}

def BFS(start_point, graph, check):
    queue = collections.deque([start_point])
    while queue:
        cur_value = queue.popleft()
        if check[cur_value]:
            continue
        else:
            check[cur_value] = True
            for cur_line in graph[cur_value]:
                if not check[cur_line]:
                    queue.append(cur_line)
            print(cur_value, end= ' ')

def DFS(start_point, graph, check):

    if check[start_point]:
        return
    else:
        print(start_point, end=' ')
        check[start_point] = True
        for cur_line in graph[start_point]:
            if not check[cur_line]:
                DFS(cur_line, graph, check)

for i in range(point):
    graph[i + 1] = []

for i in range(line):
    start, end = map(int, sys.stdin.readline().split())
    if start in graph:
        graph[start].append(end)
        graph[end].append(start)

for array in graph:
    graph[array].sort()

check = [False] * (point + 1)
DFS(start_point, graph, check)
print()
check = [False] * (point + 1)
BFS(start_point, graph, check)

(6) 실행결과


반응형
728x90

(1) 문제

  • 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
  • 명령은 총 여섯 가지이다.
    • push X: 정수 X를 큐에 넣는 연산이다.
    • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    • size: 큐에 들어있는 정수의 개수를 출력한다.
    • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
    • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 


(2) 입력

  • 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 


(3) 출력

  • 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

(4) 예제 입력 및 출력


(5) 코드

import sys
import collections

length = int(sys.stdin.readline())
queue = collections.deque([])

def command(command_list):
    if len(command_list) == 1:        
        if command_list[0] == 'empty':
            return 0 if queue else 1
        if command_list[0] == 'size':
            return len(queue)
        if queue:       
            if command_list[0] == 'pop':
                return queue.popleft()
            if command_list[0] == 'back':
                return queue[-1]
            if command_list[0] == 'front':
                return queue[0]
        else:
            return -1
    elif len(command_list) == 2:
        if command_list[0] == 'push':
            queue.append(command_list[1])

for i in range(length):
    command_list = list(sys.stdin.readline().split())    
    result = command(command_list)
    if result is not None:
        print(result)

(6) 실행결과


반응형

+ Recent posts