백준 49

[백준 알고리즘] 2851. 슈퍼마리오 _ 파이썬

💻 문제 풀이 접근 방법 1. 합을 쌓아 가다가 2. 100이 넘었을 때 중단시키고 그 앞의 값과 비교 그런데 이렇게 풀었더니, 틀리게 되었습니다ㅠㅠ 바로 100 미만 일 경우를 고려해주지 않았기 때문입니다. 🎈 문제 풀 때 다양한 경우를 함께 고려해주는 것은 정말 기초이면서도 종종 놓치는 경우가 많다. => 문제 제출 전에 오류가 뜰만한 반례를 대입해보자! import sys scores = 0 for _ in range(10): score = int(sys.stdin.readline()) pre_scores = scores scores += score if scores >= 100: if abs(100-scores) > abs(100-pre_scores): scores = pre_scores brea..

[백준 알고리즘] 11659. 구간 합 구하기 4 _ 파이썬

구간 합 구하기 문제입니다 구간 합인 경우 누적합을 이용하면 훨씬 빠릅니다!! 처음에는 그냥 for문을 돌려 그때그때 마다 sum을 계산하도록 하는 코드를 작성하였습니다. 그렇게 하니 채점은 저에게 시간초과를 선물해주더군요ㅠㅠ - 👨‍🎓 TIL → 함수가 1000번 이상 돌면 파이썬 내에서 recursionerror가 생겨 런타임 오류가 나타나므로 1000번이 돌아가지 않도록 코드를 짜거나, sys.setrecursionlimit()를 사용해 최대 재귀 깊이를 바꿔준다.(스터디장님께서는 꼼수라며..ㅎㅎ 더 나은 알고리즘을 고안해내기를 추천하셨다!) → 여러번 합을 계산하도록 하는 게 아니라, 한번 누적합을 계산해놓고 필요한 수를 추출하여 빼주는 것이 더 빠르다. → arr = [0] + list(map(..

[백준 알고리즘] 4344. 평균은 넘겠지(소수점 처리) - 파이썬

T = int(input()) for tc in range(1, T + 1): arr = list(map(int, input().split())) N = arr[0] scores = arr[1:] # 평균 s1 = 0 for i in scores: s1 += i ave = s1 / N # 평균을 넘는 학생 비율 count = 0 ratio = 0 for i in scores: if i > ave: count += 1 ratio = count/N*100 # 소수점 출력 print(f'{ratio:.3f}%') 🎈 소수점 출력시 문자열 포맷팅으로 처리하기!! 처음에는 round()로 하려고 했지만, round() 함수는 끝자리가 0이면 출력을 하지 않았습니다ㅠㅠ 위의 문제의 출력예제의 첫째 줄을 보면 40%..

[백준 알고리즘] 8958. OX퀴즈 - 파이썬

T = int(input()) for i in range(1, T+1): result = input() score = [] # O인경우 1, X인경우 0으로 리스트 생성 for i in result: if i == 'O': score.append(1) else: score.append(0) #누적합 만들기 for i in range(1, len(score)): # 해당 숫자가 1이고, 이전 숫자도 1인경우 이전 숫자에 +1한 값으로 변경 if score[i] and score[i-1]: score[i] += score[i-1] print(sum(score)) 🎈 많은 문제들이 리스트를 만들어 단순히 값을 저장하는 것에 넘어, 필요한 정보를 저장해놓고 활용한 경우가 많음! 위의 문제에서는 O인 경우 1로 ..

[백준 알고리즘] 10828번 스택

말 그대로 스택을 구현하는 문제입니다. 명령어를 내리면, 그 명령에 맞는 행동을 하거나 결과값을 출력하는 건데요. 저는 이 문제를 통해 큰 깨달음을 하나 얻었는데요.. 바로 ".함수를 제대로 알고 쓰자!" 입니다. 함수 기능은 알고 있었지만, 그 미묘한 차이를 구분하지 않고 그냥 썼던 것이 발단이 되어 한시간을 헤매게 만들었습니다.. 원인은 바로 맨 마지막 줄인 pop이였는데요. 원래는 pop(-1)이 아닌 remove(stack[-1])로 했습니다. pop(-1), remove(stack[-1]) 둘다 stack =[1, 2, 3] 인 경우에는 두개 다 3을 반환해서 정상적으로 작동합니다. 하지만, stack = [2, 3, 4, 3] 인 경우에는? pop은 뒤의 3을 반환하게 되서 [2, 3, 4]가..

[백준 알고리즘] 11653번 소인수분해 _ 파이썬 python

www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 소인수분해는 결국 2부터 차례대로 돌릴 수밖에 없는데요. 여기서 핵심은 앞에 숫자에서 나눌 수 있을 만큼 나눈 다음에 다음 숫자로 넘어가야 합니다. 그래서 while을 사용하여 나눠질 때까지 계속 나누고 난 뒤 for문을 통해서 다음 숫자로 가는 방법으로 코드를 짰습니다. n = int(input()) if n == 1: print('') # 2부터 하나씩 나눠보기 for i in range(2, n+1): if n % i == 0: #해당 숫자로 나눌 수 없을 때까지 나누기 while n % i == 0: print(i) n =..

[백준 알고리즘] 11399번 ATM_ python 파이썬

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 최단시간을 구하는 방법은 시간이 적게 걸리는 사람 순으로 줄을 세우면 되는데요. .sort()를 이용하면 작은 순서대로 배열 됩니다. count = input() persons = list(map(int, input().split())) persons.sort() sum = 0 new = 0 for i in persons: new += i sum += new print(sum) 변수를 2개 사용하면 쉽게 해결됩니다. new는 ..

[백준 알고리즘] 은근히 까다로운 1712번 손익분기점 _ 파이썬

[1712번] 손익분기점 손익분기점을 구하는 문제입니다. 입력으로 A, B, C가 주어지는 데요. A는 고정비용 B는 가변비용, C는 판매로 얻는 수익(수입)입니다. 쉬운 듯하면서도 제대로 이해하지 못하면 헤매는 문제입니다. 💻 2가지로 분류해서 처리해야 합니다. 1) 손익 분기점을 달성하지 못하는 상태 : C(이익)이 B(가변비용) 보다 크지 않거나 같을 때 2) 손익 분기점을 달성할 수 있는 상태 C-B>0보다 클 때, C-B를 A(고정비용)으로 나누는 x값의+1 시점이 손익분기점이 됩니다. A, B, C = map(int, input().split()) # 손익분기점에 도달하지 못하는 경우 처리 if B >= C : print(-1) # 손익분기점 구하는 식 else: print(A//(C-B)+1..

[백준 알고리즘] 4673번 셀프 넘버

[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, 114, 120, 123, 129, 141, ... ..