[Python] 백준/BOJ 10828번: 스택
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/10828 문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 풀이 push X: 파이썬에서는 st.append(X) pop: st.pop() size: 스택의 길이 le..
[Python] 백준/BOJ 24060번: 알고리즘 수업 - 병합 정렬 1
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/24060 문제 오늘도 서준이는 병합 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 병합 정렬로 배열 A를 오름차순 정렬할 경우 배열 A에 K 번째 저장되는 수를 구해서 우리 서준이를 도와주자. 크기가 N인 배열에 대한 병합 정렬 의사 코드는 다음과 같다. merge_sort(A[p..r]) { # A[p..r]을 오름차순 정렬한다. if (p < r) then { q
[Python] 백준/BOJ 4673번: 셀프 넘버
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/4673 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111,..
[Python] 백준/BOJ 2563번: 색종이
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/2563 문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 풀이 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지를 space 리스트로 나타낸다. 리스트 안은 모두 0으로 채운다. 입력받은 검은색 색종이 넓이의 공간을 1로 바꿔준..
[Python] 백준/BOJ 4344번: 평균은 넘겠지
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/4344 문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 풀이 score = list(map(int, sys.stdin.readline().split())) student = score[0] del score[0] student는 학생의 수, score는 n명의 점수이다. for s in score: if s > sum(score) / student: cnt += 1 평균이 넘는 학생들의 수를 센다. print(f'{cnt / student * 100:.3f}', '%', sep='') (평균이 넘는 학생들의 수) / (전체 학생 수) * 100을 출력한다. 코드 im..
[Python] 백준/BOJ 8958번: OX퀴즈
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/8958 문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 풀이 OX 퀴즈의 결과를 하나의 문자열로 입력받아 반복문을 돌렸다. cnt는 해당 문제의 점수이고, score는 전체 합산 점수이다. O이면 cnt에 +1을 하여 계속 O가 나오면 점수가 1점, 2점, 3점 이런 식으로 점점 오르도록 하였다. 해..
[Python] 백준/BOJ 2744번: 대소문자 바꾸기
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/2744 문제 영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오. 풀이 입력받은 단어를 문자열 함수 swapcase()를 사용해 대문자는 소문자로, 소문자는 대문자로 변환해서 출력한다. swapcase()는 대문자는 소문자로, 소문자는 대문자로 각각 변환해주는 문자열 함수이다. 코드 print(input().swapcase())
[Python] 백준/BOJ 1373번: 2진수 8진수
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/1373 문제 2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오. 풀이 먼저 숫자를 입력받는다. int() 함수의 default는 10진수이기 때문에 진법을 2로 지정해준다. 문자열 함수 oct()를 사용해 주어진 2진수를 8진수로 변환한다. 8진수는 숫자 앞에 0o가 붙는다. 예제 출력은 0o 없이 숫자만 출력했으므로 슬라이싱해서 숫자만 출력해준다. 코드 print(oct(int(input(), 2))[2:])