백준 문제풀이 18

백준 온라인 저지 - 덩치(#7568) 파이썬

문제설명 이 문제는 입력받은 순서대로 덩치 랭킹을 매겨야 하기 때문에, ranking이라는 List를 따로 만들고, 사람들의 키, 몸무게가 담겨있는 people이라는 List에서 사람들의 키와 몸무게를 이중 for문을 이용하여 모두 비교한 후 조건을 충족하면 ranking의 해당 인덱스의 값을 +1 해주는 식으로 해결하였습니다. 자세한 사항은 코드를 참고하시기 바랍니다. 문제이름(# 문제번호) 파이썬 코드 import sys n = int(sys.stdin.readline()) people = [tuple(map(int, sys.stdin.readline().split())) for i in range(n)] ranking = [1 for k in range(n)] for i in range(len(pe..

백준 온라인 저지 - 분해합(#2231) 파이썬

문제설명 이 문제는 각 자릿수의 합을 문자열로 보고 문자열의 각 요소를 더해줌으로써 쉽게 해결할 수 있습니다. 0부터 n까지 숫자를 오름차순으로 검사하다가 조건에 맞는 수가 나오면 종료하는 방법으로 풀 수 있습니다. 자세한 풀이는 코드를 참고하시면 됩니다. 분해합(#2231) 파이썬 코드 n = int(input()) result = 0 for i in range(n): dcp = i + sum(int(j) for j in str(i)) # dcp = decomposition(분해합) if dcp == n: # 분해합이 n일 경우 결과값에 i값 할당, 반복문 종료 result = i break print(result)

백준 온라인 저지 - 블랙잭(#2798) 파이썬

문제설명 브루트포스는 조합 가능한 모든 경우의 수를 하나씩 검사하는 방법입니다. 이 문제는 3개의 숫자의 합이 M을 넘지 않으면서 M과 가장 가까운 수를 찾아야 합니다. 저는 itertools의 combinations 함수를 사용하여 주어진 카드 중 3장을 골라 조합할 수 있는 경우의 수를 모두 구해 coc라는 리스트에 담았습니다. 그 다음 coc 리스트 내에 있는 카드의 조합들을 검사하여 m이 넘지 않는 가장 큰 수를 구하였습니다. 자세한 내용은 코드를 참고하시면 됩니다. 문제이름(# 문제번호) 파이썬 코드 import sys import itertools n, m = map(int, sys.stdin.readline().split()) cards = list(map(int, sys.stdin.read..

백준 온라인 저지 - ACM호텔(#10250) 파이썬

문제설명 이 문제의 핵심은 경우의 수를 잘 나누는 것입니다. 호텔에 온 순서대로 1)가까운 호실, 2) 낮은 층을 배정합니다. 101, 201, 301..102, 202, 302.. 의 형태로 배정이 되겠죠. 먼저 여러 개의 테스트케이스를 받기 때문에 for문을 활용하여 H, W, N을 테스트케이스 배열에 저장합니다. 그 다음, N번째로 온 손님이 머물 층과 호수를 따로 구해야 합니다. 먼저 층은 N을 H로 나눈 나머지가 될 것입니다. 단, 나머지가 0이라면 N은 H가 되어야 합니다. 호실의 경우 N을 H로 나눈 몫이 됩니다. 이제 하나의 문자열에 층과 호수를 합쳐서 방 번호를 출력하면 되는데, 호수가 9 이하라면 층과 호수 사이에 0을 삽입해야 합니다. ACM호텔(#10250) 파이썬 코드 t = in..

백준 온라인 저지 - 달팽이는 올라가고 싶다(#2869) 파이썬

문제설명 이 문제의 핵심은 시간제한입니다. while문을 돌리면 간단하게 구현할 수 있지만 (1 ≤ B < A ≤ V ≤ 1,000,000,000) 라는 큰 수가 입력값으로 주어지기 때문에 while문을 사용하면 시간초과가 뜹니다. 그렇다면 두 가지의 경우로 나누어 풀면 됩니다. 먼저 달팽이가 꼭대기에 올라가기까지의 일수를 담을 변수 n을 설정합니다. 이 n이 정수일 경우는 달팽이가 하루에 올라갈 수 있는 할당량을 모두 채우며 꼭대기에 도달하는 경우입니다. 이 경우는 nA + (n-1)B = V, 즉 n = (V-B)/(A-B)이 성립한다면 n을 출력하고, 그 외의 경우, 즉 달팽이가 할당량을 모두 채우지 않은 채로 꼭대기에 도달하는 경우, n이 소수점을 가지게 되죠. 이 경우에는 n+1을 출력하면 됩니..

백준 온라인 저지 - 분수찾기(#1193) 파이썬

문제설명 2차원 배열에 분수가 담겨있고, 이는 아래로 향하는 (X, Y) 좌표로도 볼 수 있습니다. 이 배열의 형태도 마찬가지로 문제 해결을 위해서는 규칙성을 찾아야 합니댜. 저는 배열의 대각선을 또다른 배열로 보았습니다. 단, 지그재그 순서로 분수에 번호를 매기기 때문에 첫번째 배열은 1/1, 두번째 배열은 2/1, 1/2, 세번째 배열은 3/1, 2/2, 1/3이 담겨있고, N번째 배열에는 N개의 배열이, N이 홀수라면 N/1, N-1/2 .. 1/N 순서로, 짝수라면 역순으로 담겨있겠죠? 또한 지그재그 형태로 지나가면서 분수에 번호를 매기기 때문에 각 배열에 포함된 분수의 갯수의 합으로 이루어진 수열, 1, 1+2, 1+2+3.. 순으로 증가하는 수열, 등차수열이 포함된 계차수열입니다. (계차수열에..

백준 온라인 저지 - 벌집(#2292) 파이썬

문제설명 수와 도형에 관련된 문제는 규칙성을 찾는 것이 가장 먼저겠죠? 먼저,가장 작은 육각형을 육각형1 이라고 할 때, 육각형을 둘러싸고 있는 육각형들의 집합을 육각형2, 육각형3.. 순으로 보았습니다. 가장 작은 육각형은 1, 두번째는 2, 3, 4, 5, 6, 7, 세번째는 8, 9...19 를 담고 있는데요, 저는 육각형 집합에 포함된 가장 큰 숫자들에 주목했습니다. 몇번째 육각형 집합인지가 곧 시작점에서 육각형에 도달하는 최소이동거리가 되겠죠? 각 육각형 집합에 포함된 가장 큰 숫자는 1, 7, 19, 37.. 순으로 증가하고, 이것은 1, 1+6, 1+6+12, 1+6+12+18로 바꾸어 쓸 수 있습니다. 이것은 고등학교 수학시간에 배운 계차수열의 형태네요. 계차수열은 수열의 인접한 두 항에..

백준 온라인 저지 - 손익분기점(#1712) 파이썬

문제설명 단계별로 풀어보기 기본수학1 첫번째 문제인 손익분기점 입니다. 저는 BEP(Break-Even-Point)를 BEP = int(a/(c-b)) + 1로 두고, BEP가 0보다 크면 BEP를, 0보다 작으면 손익분기점이 존재하지 않기 때문에 -1을 출력하게 하고, 0으로 나눴을 때 발생하는 ZeroDivisionEroor를 방지하기 위해 try-except문을 활용하여 0으로 나누었을 때는 -1을 출력하도록 소스코드를 짰습니다. 여기서 주의할 점은 BEP를 정의할 때 try문 밖에 쓰면 ZeroDivisionError가 발생한다는 점! 손익분기점(# 1712) 파이썬 코드 a, b, c = map(int, input().split()) while True: try: bep = int(a/(c-b)..