728x90

전체 글 115

[백준] 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

[백준] 9184 | 신나는 함수 실행 [파이썬/python]

문제link: https://www.acmicpc.net/problem/9184문제에서 제시하는 함수 w(a, b, c)의 실행 결과를 반환하는 문제이다. 접근문제에서 제시된 함수 w(a, b, c)는 재귀함수 형태라 효율적이지 않다.함수 w가 a, b, c 중 하나라도 0 이하일 때는 1을 반환하고 하나라도 20 이상일 때는 w(20, 20, 20)을 반환하기 때문에, 3차원 리스트 W를 만들어 W[0][0][0] ~ [20][20][20]의 값을 미리 계산해 저장한 후 사용했다. for문을 통해 a, b, c가 적은 것부터 구해 다음 값 계산에 활용했다.a == b == c == -1인 경우 프로그램을 종료한다.코드import sysinput = sys.stdin.readlinedef w(a, b, ..

알고리즘 2025.03.28

[백준] 3046 | R2 [파이썬/python]

문제link: https://www.acmicpc.net/problem/3046 접근S가 두 수 R1과 R2의 평균이므로 R1과 S 값으로 R2를 구할 수 있다.S = (R1 + R2) / 2 2S = (R1 + R2) 2S - R1 = R2따라서, 2*S - R1 값을 print했다. 외출할 일이 있어 늦게 귀가했는데 1일 1문제 풀기라는 계획은 또 놓치기 싫어서 아주아주 쉬운 문제를 풀었다...😅 어쩐지 꼼수를 쓴 것 같아 기분이 미적지근하다. 반성하는 마음으로 몇 문제 더 풀어야겠음. 코드R1, S = map(int, input().split())print(2*S - R1)

알고리즘 2025.03.27

[백준] 24416 | 알고리즘 수업 - 피보나치 수 1 [파이썬/python]

문제link: https://www.acmicpc.net/problem/24416재귀호출과 동적 프로그래밍 두 방법으로 피보나치 수를 구할 때의 코드 실행 횟수를 각각 구해 비교하는 문제이다. 접근특정 코드의 실행 횟수를 구해야 하기 때문에, 문제에서 제시한 의사 코드대로 코드를 작성했다.DP로 구하는 경우 코드의 실행 횟수가 항상 n - 2이기 때문에 n - 2를 바로 출력해주었다. 코드import sysinput = sys.stdin.readlinen = int(input())cnt_r = 0cnt_dp = n - 2def fib(n): global cnt_r if n == 1 or n == 2: cnt_r += 1 return 1 else: return (f..

알고리즘 2025.03.26

[백준] 9663 | N-Queen [파이썬/python]

문제link: https://www.acmicpc.net/problem/9663NxN 크기의 체스판 위에 N개의 queen이 서로를 공격하지 못하도록 위치시키는 경우의 수를 구하는 문제이다. 접근알고리즘(백트래킹) 공부를 할 때 본 적 있는 문제라 반가웠다. 예전에 C++로 코드를 짜둔 게 있어서 python으로 바꿔 제출하려고 했는데 아래와 같이 시간 초과 오류가 났다. 코드 문제인 줄 알고 list도 set으로 바꾸고 이래저래 코드를 고쳐 제출했는데도 여전해서 난감했다...😅 결국 구글링했는데 PyPy3으로 제출해야 한다는 답을 얻었다! 더 이상의 코드 수정 없이 제출했다.체스판의 queen은 행, 열, 대각선 방향으로 이동할 수 있다. set col에 queen N개가 위치하는 열의 숫자를 저장하..

알고리즘 2025.03.25

[백준] 15652 | N과 M (4) [파이썬/python]

문제link: https://www.acmicpc.net/problem/15652중복조합을 구하는 문제이다. 접근백트래킹 알고리즘을 이용하였다. N과 M (2)에서 작성했던 코드를 응용했다.https://going-on.tistory.com/17 [백준] 15650 | N과 M (2) [파이썬/python]문제link: https://www.acmicpc.net/problem/15650입력받은 값에 따라 조합을 구하는 문제이다. 접근이전에 N과 M (1)을 풀 때 itertools를 사용했기 때문에 이번에는 itertools 대신 백트래킹 알고리즘을 활용해going-on.tistory.com 코드import sysinput = sys.stdin.readlinedef combination_rep(start..

알고리즘 2025.03.24

[백준] 15651 | N과 M (3) [파이썬/python]

문제link: https://www.acmicpc.net/problem/15651중복순열을 구하는 문제이다. 접근백트래킹 알고리즘을 이용해 코드를 작성했다. N과 M (2)의 코드를 변형하여 사용했다.https://going-on.tistory.com/17 [백준] 15650 | N과 M (2) [파이썬/python]문제link: https://www.acmicpc.net/problem/15650입력받은 값에 따라 조합을 구하는 문제이다. 접근이전에 N과 M (1)을 풀 때 itertools를 사용했기 때문에 이번에는 itertools 대신 백트래킹 알고리즘을 활용해going-on.tistory.com 코드import sysinput = sys.stdin.readlinedef permutation_rep..

알고리즘 2025.03.24

[백준] 15650 | N과 M (2) [파이썬/python]

문제link: https://www.acmicpc.net/problem/15650입력받은 값에 따라 조합을 구하는 문제이다. 접근이전에 N과 M (1)을 풀 때 itertools를 사용했기 때문에 이번에는 itertools 대신 백트래킹 알고리즘을 활용해 코드를 작성했다. 재귀함수를 이용했다. 코드import sysinput = sys.stdin.readlinedef combination(start): if len(tmp) == M: print(" ".join(map(str, tmp))) return for i in range(start, N + 1): tmp.append(i) combination(i + 1) tmp.pop..

알고리즘 2025.03.23
728x90