기초 프로그래밍/Python 68

[백준] 2903번 파이썬 python(중앙 이동 알고리즘)

▷ 문제 상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다. 외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다. 알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다. 정사각형의 각 변의 중앙에 점을 하나 추가한다. 정사각형의 중심에 점을 하나 추가한다. 초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다. 아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다. 상근이는 어떤 점은 한 개 보다 많은 정사각형에 ..

[백준] 2720번 파이썬 python(세탁소 사장 동혁)

▷ 문제 미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다. 동혁이는 리암에게 실망했다. 리암은 거스름돈을 주는 것을 자꾸 실수한다. 심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다! 어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다. 거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님..

[백준] 11005번 파이썬 python(진법 변환 2)

▷ 문제 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 ▷ 전체 코드 N, B = map(int, input().split()) a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" b = "" while N: b += str(a[N%B]) N //= B print(b[::-1]) ▷ 코드 분석 N, B = map(int, input().split()) 변수 N에 10진법의 수를 저장하고, 변수 B에 몇 진법으로 바꿀지 저장한다. map() 함수를 ..

[백준] 2745번 파이썬 python(진법 변환)

▷ 문제 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 ▷ 전체 코드 N, B = input().split() N = N[::-1] B = int(B) a = list("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") b = 0 for i,n in enumerate(N): b += (B**i)*(a.index(n)) print(b) ▷ 코드 분석 N, B = input().split() N = N[::-1] B = int(B) 변수 N에 변환할 수를 ..

[백준] 2563번 파이썬 python(색종이)

▷ 문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. ▷ 전체 코드 n = int(input()) a = [[0]*100 for i in range(100)] for i in range(n): x, y = map(int, input().split()) for i in range(x, x+10): for j in..

[백준] 10798번 파이썬 python(세로읽기)

▷ 문제 아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다. 한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다. 심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단..

[백준] 2566번 파이썬 python(최댓값)

▷ 문제 과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 예를 들어, 다음과 같이 81개의 수가 주어지면 이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다. ▷ 전체 코드 a = [] for i in range(9): a.append(list(map(int, input().split()))) x = 0 r = 0 c = 0 for i in range(9): for j in range(9): if a[i][j] >= x: x = a[i][j] r = i+1 c = j+1 print(x) print(r, c) ▷ 코드 분석 a = [] for i in range(9): a.appe..

[백준] 2738번 파이썬 python(행렬 덧셈)

▷ 문제 N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오. ▷ 전체 코드 N, M = map(int, input().split()) a = [] b = [] for i in range(N): a.append(list(map(int, input().split()))) for i in range(N): b.append(list(map(int, input().split()))) for i in range(N): for j in range(M): print(a[i][j] + b[i][j], end=' ') print() ▷ 코드 분석 N, M = map(int, input().split()) a = [] b = [] 변수 N과 M에 각각 행렬의 행과 열의 수를 저장한다. m..

[백준] 25206번 파이썬 python(너의 평점은)

▷ 문제 인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치훈이의 전공평점을 계산해주는 프로그램을 작성해보자. 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다. 인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다. P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다. 과연 치훈이는 무사히 졸업할 수 있을까? ▷ 전체 코드 a = {"A+": 4.5, "A0": 4.0, "B+": 3.5, "B0": 3.0, "C+": 2.5, "C0": 2.0, "D+": 1.5, "D0": 1.0, "F..

[백준] 2941번 파이썬 python(크로아티아 알파벳)

▷ 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. ▷ 전체 코드 x = input() y = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="] for i in y: x = x.replace(i, "a") print(len(x)) ▷ 코드 분석 x = ..