본문 바로가기

알고리즘 공부

(207)
[백준 파이썬] #10102: 개표 https://www.acmicpc.net/problem/10102 10102번: 개표 입력은 총 두 줄로 이루어져 있다. 첫째 줄에는 심사위원의 수 V (1 ≤ V ≤ 15)가 주어지고, 둘째 줄에는 각 심사위원이 누구에게 투표했는지가 주어진다. A와 B는 각각 그 참가자를 나타낸다. www.acmicpc.net [정답] 1. 심사위원의 수 V를 입력받는다. 투표결과를 입력받아 리스트 vote에 저장한다. 2. A,B가 받은 표 수를 저장하기 위해 num_A와 num_B를 정의한다. 3. for문을 돌면서 i가 A이면 num_A+=1해주고, i가 B이면 num_B+=1을 해준다. 4. 만약 num_A>num_B이면 A를, num_A
[백준 파이썬] #5635: 생일 https://www.acmicpc.net/problem/5635 5635번: 생일 어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오. www.acmicpc.net [정답] 1. 반에 있는 학생의 수 N을 입력받는다. 2. 학생들의 정보를 담을 리스트 student을 정의한다. for문을 돌면서 학생들의 정보를 받아 student에 추가한다. 3. student를 나이가 작은 순으로 정렬한다. student.sort(reverse=True,key=lambda x:(int(x[3]), int(x[2]), int(x[1]))) → x[3]: 연도, x[2]: 월, x[1]: 일 기준으로 정렬을 하면 나이의 내림차순이므로 reverse=Tru..
[백준 파이썬] #18258: 큐2 https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net [오답] → 시간초과 다른 문제에서 collections 패키지의 deque 모듈을 사용했을 때 시간이 단축된다는 것을 발견하고 이 문제를 다시 풀어보았다. [정답] 먼저 queue에 대한 함수들을 정의한다. 1. 'push X: 정수 X를 큐에 넣는 연산이다.' → push(X): append() 함수를 사용하여 큐 q_queue에 인자값 X를 push한다. 2. 'po..
[백준 파이썬] #2164: 카드2 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net [오답] → 시간초과 이 문제의 시간초과를 해결하려면 collections 패키지의 deque 모듈을 사용해야 한다. [정답] ※ 문제 "예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다.(→ 맨 위의 수를 버린다.) 여기서 2를 제일 아래로 옮기면 342가 된다.(→ 맨 위의 수를 맨 밑으로 보낸다.) 3을 버리면 42가 ..
[백준 파이썬] #10817: 세 수 https://www.acmicpc.net/problem/10817 10817번: 세 수 첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100) www.acmicpc.net [정답] 1. 세 수를 입력받아 int형태로 리스트 num_list에 추가한다. 2. num_list를 오름차순 정렬한다. 3. 두 번째로 큰 정수를 출력해야 하므로 오름차순 정렬된 num_list의 2번째 수 즉 num_list[1]을 출력한다.
[백준 파이썬] #2935: 소음 https://www.acmicpc.net/problem/2935 2935번: 소음 수업 시간에 떠드는 두 학생이 있다. 두 학생은 수업에 집중하는 대신에 글로벌 경제 위기에 대해서 토론하고 있었다. 토론이 점점 과열되면서 두 학생은 목소리를 높였고, 결국 선생님은 크게 www.acmicpc.net [정답] 1. 양의 정수 A를 입력받는다. 2. 연산자 + 혹은 *를 C에 입력받는다. 3. 양의 정수 B를 입력받는다. 4. 만약 연산자 C가 '+'일 경우 A+B를 출력하고, 아닐 경우 즉 C가 '*'일 경우이므로 A*B를 출력한다.
[백준 파이썬] #10828: 스택 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net [정답] 먼저 stack에 대한 함수들을 정의한다. 1. 'push X: 정수 X를 스택에 넣는 연산이다.' → push(X): append() 함수를 사용하여 리스트 stack에 인자값 X를 push한다. 2. 'pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → pop(): len(stack)=..
[백준 파이썬] #2108: 통계학 https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net [정답] 1. 수의 개수 N을 입력받는다. 수들을 저장할 리스트 num을 정의한다. 2. for문을 돌면서 num에 수들을 저장한다. 그리고 num을 정렬한다. 3. 산술평균을 구하는 함수 mean()를 정의한다. round()함수를 사용하여 반올림값을 정해준다. 4. 중앙값을 구하는 함수 mid()를 정의한다. 5. 최빈값을 구하는 함수 mode()를 정의한다. collections 라이브러리의 Counter를 사용하여 최빈값을 ..