728x90

python 107

[백준] 1654 | 랜선 자르기 [파이썬/python]

문제link: https://www.acmicpc.net/problem/1654주어진 랜선 K개를 잘라 같은 길이의 N개 랜선을 만들 때, 만들어질 랜선의 최대 길이를 구하는 문제이다. 접근이분 탐색을 활용한다.주어진 랜선 길이 중 가장 긴 것을 바탕으로 중간값을 구하고, 그 중간값 길이로 만들 수 있는 랜선의 개수를 구한다. 가능한 개수가 N개보다 같거나 많으면 임시 저장하고, 범위를 좁혀가며 가장 긴 길이를 찾아 출력한다. 코드import sysinput = sys.stdin.readlineK, N = map(int, input().split())LAN = [int(input()) for _ in range(K)]l, r = 1, max(LAN)ans = 0while l

알고리즘 2025.04.01

[백준] 18110 | solved.ac [파이썬/python]

문제link: https://www.acmicpc.net/problem/18110난이도에 대한 의견을 정수로 입력받아 30% 절사평균을 출력하는 문제이다.  접근30% 절사평균을 구할 때, 제외할 값의 수와 평균은 모두 반올림한다.파이썬의 round()를 사용하지 않고, 직접 반올림을 구현했다. 코드import sysinput = sys.stdin.readlinen = int(input())if n == 0: print(0) else: p = n * 0.15 p = int(p) if (p * 10) % 10

알고리즘 2025.03.31

[백준] 10828 | 스택 [파이썬/python]

문제link: https://www.acmicpc.net/problem/10828스택을 구현하는 문제이다. 접근if문으로 입력되는 명령을 구분해 처리하도록 구현했다. 코드import sysinput = sys.stdin.readlines = []for _ in range(int(input())): tmp = input().split() if tmp[0] == 'push': s.append(tmp[1]) elif tmp[0] == 'pop': print(s.pop() if s else -1) elif tmp[0] == 'size': print(len(s)) elif tmp[0] == 'empty': print(0 if s else 1) elif tmp[0] == 'top':..

알고리즘 2025.03.31

[백준] 1920 | 수 찾기 [파이썬/python]

문제link: https://www.acmicpc.net/problem/1920두 개의 자연수 목록을 받아 두 번째 목록의 숫자들이 첫 번째 목록에 존재하는지를 확인하는 문제이다. 접근처음 입력받은 자연수 목록을 set에 저장한 후, for문을 통해 두 번째 자연수를 하나씩 조회하며 결과를 출력하도록 했다. 코드import sysinput = sys.stdin.readlineN = int(input())A = set(map(int, input().split()))M = int(input())for b in map(int, input().split()): if b in A: print(1) else: print(0)

알고리즘 2025.03.31

[백준] 1676 | 팩토리얼 0의 개수 [파이썬/python]

문제link:  https://www.acmicpc.net/problem/1676 접근n!을 구한 후, 뒤에서부터 0의 개수를 세는 문제이다. 단, 0이 아닌 숫자가 나올 때까지만, 즉, 연속되어 있는 0의 개수만 센다.팩토리얼을 구한 후 for문을 통해 세는 방법도 있겠지만, 10이 곱해질 때마다 0이 늘어난다는 점에서 착안해 팩토리얼 계산 과정에서 곱해지는 5의 개수를 셈해 출력하도록 했다. 코드N = int(input())f = 5cnt = 0while N >= f: cnt += N // f f *= 5 print(cnt)

알고리즘 2025.03.31

[백준] 2609 | 최대공약수와 최소공배수 [파이썬/python]

문제link: https://www.acmicpc.net/problem/2609입력받은 두 수의 최대공약수와 최소공배수를 구하는 문제이다. 접근유클리드 호제법을 사용하면 최대공약수와 최소공배수를 쉽게 구할 수 있다.최대공약수를 먼저 구한 후, 최소공배수는 구한 최대공약수를 이용해 구했다.(n * m = 최대공약수 * 최소공배수 인 것을 활용했다.) 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())def euc(a, b): if b > a: a, b = b, a a = a % b if a == 0: return b else: return euc(b, a) gcd = euc(n, m)lcm = n * m ..

알고리즘 2025.03.31

[백준] 28702 | FizzBuzz [파이썬/python]

문제link: https://www.acmicpc.net/problem/28702 접근입력값이 세 개 주어지는데, 적어도 한 번은 숫자가 나오기 때문에 숫자가 입력된 경우 그 숫자를 이용해 답이 될 수를 찾도록 코드를 설계했다.함수 FizzBuzz를 만들어 출력할 값을 규칙에 따라 출력하도록 했다. 코드import sysinput = sys.stdin.readlinedef fizzbuzz(i): if i % 3 == 0 and i % 5 == 0: print('FizzBuzz') elif i % 3 == 0: print('Fizz') elif i % 5 == 0: print('Buzz') else: print(i)for i in ra..

카테고리 없음 2025.03.30

[백준] 1259 | 팰린드롬수 [파이썬/python]

문제link: https://www.acmicpc.net/problem/1259입력받은 수가 팰린드롬수인지 체크하여 출력하는 문제이다. 접근[::-1]로 문자열을 뒤집어 비교하는 방법도 있지만, for문을 통해 인덱스로 접근하여 팰린드롬수인지를 확인하도록 구현해보았다. 코드import sysinput = sys.stdin.readlinewhile 1: tmp = input().strip() f = 1 if tmp == '0': break for i in range(len(tmp)//2): if tmp[i] != tmp[-(i+1)]: f = 0 break print('yes' if f else 'no')

알고리즘 2025.03.30

[백준] 15829 | Hashing [파이썬/python]

문제link: https://www.acmicpc.net/problem/15829해시 함수를 이용해 계산한 해시 값을 출력하는 문제이다. 접근문제를 참고해 해시 값을 계산한다.sys.stdin.readline을 사용할 경우 꼭 .strip()(또는 .rstrip())을 사용해 개행 문자를 제거해주어야 한다. 코드import sysinput = sys.stdin.readlineL = int(input())abc = input().strip()r = 1M = 1234567891H = 0for i in abc: H = (H + (ord(i) - ord('a') + 1) * r) % M r = (r*31) % M print(H)

알고리즘 2025.03.30

[백준] 30802 | 웰컴 키트 [파이썬/python]

문제link: https://www.acmicpc.net/problem/30802규칙에 따라 주문할 티셔츠와 펜의 개수를 계산해 출력하는 문제이다. 접근티셔츠의 경우, T개 묶음으로 주문할 수 있다. 신청한 대로 나눠주되 남는 것은 괜찮고 모자라서는 안 된다. 따라서 사이즈별로 T 값에 따라 올림해 주문한다.펜의 경우, P자루 묶음으로도 주문할 수 있고 개별로도 주문할 수 있다. 전체 인원에서 P로 나눈 값(묶음의 개수)과 나머지(개별 주문 개수)를 출력한다. 코드import sysinput = sys.stdin.readlineN = int(input())size = list(map(int, input().split()))T, P = map(int, input().split())print(sum((i -..

알고리즘 2025.03.29
728x90