코딩일지/python 백준 알고리즘 81

python 백준 알고리즘 2750번: 수 정렬하기

https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 오름차순 정렬 - sort 혹은 sorted 이용 sort - 리스트 자체를 변경 / sorted - 기존의 리스트가 아닌 정렬된 새로운 리스트 생성 문제에서 권장하는 방법으로 버블정렬, 삽입정렬을 사용할 수도 있다 버블정렬 - 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (마지막-1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬하..

python 백준 알고리즘 10870번: 피보나치 수 5 - 동적 프로그래밍 활용해보기

https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 기존에 활용했던 재귀함수를 사용하면 이렇게 표현할 수 있다. def fibonacci(n): if n

python 백준 알고리즘 1436번: 영화감독 숌

https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 첫 666의 카운트를 1로 잡고 무식하게 1씩 더해가면서(six_n += 1) '666'이 포함될때마다 카운트를 늘린다. 입력받은 n의 값을 카운트로 하는 수를 출력하면 끝. 내 제출 n = int(input()) cnt = 0 six_n = 666 while True: if '666' in str(six_n): # 666이란 글자가 포함되어 있다면 cnt += 1 # 카운트 올리기 666(1)..

python 백준 알고리즘 1018번: 체스판 다시 칠하기

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 8*8 체스판을 만들기 위해 공간확보 필요(range(n-7), range(m-7)) 흰색으로 시작할 경우, 검은색으로 시작할 경우별로 경우의 수를 모두 구해서 최솟값(min) 출력. 구상은 했지만 코드를 짜는데 어려움을 많이 겪어 구글링을 많이 한 문제다. 꾸준히 복습해서 제대로 흡수합시다 내 제출 n, m = map(int, input().split()) # 열, 행 board = []..

python 백준 알고리즘 7568번: 덩치

https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net input값으로 리스트 작성 후 이중 반복문을 통해 각 인물들마다 리스트 인원별로 키, 몸무게를 비교해서 둘 다 작다면 등수를 올리는 방식으로 구상했다. 내 제출 N = int(input()) # 사람 수 people = [] for _ in range(N): # 몸무게, 키 리스트 생성 x, y = map(int, input().split()) people.append((x,y)) ..

python 백준 알고리즘 2798번: 블랙잭

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 파이썬에서 제공하는 순열 조합 라이브러리의 combinations 함수를 이용하여 3개의 카드 조합의 경우를 구했다. ** itertools https://docs.python.org/ko/3/library/itertools.html itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.10.7 문서 itertools — 효율적인 ..

python 백준 알고리즘 11729번: 하노이 탑 이동 순서

https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net ** 참고자료 하노이의 탑 알고리즘 https://www.youtube.com/watch?v=FYCGV6F1NuY&t=378s n개의 원판이 있을때, 맨 밑의 원판을 제외한 나머지 n - 1개의 원판들을 시작기둥에서 보조기둥으로 옮긴 뒤(1단계), 맨 밑의 원판을 목표기둥으로 옮긴다(2단계). 그리고 n - 1개의 원판들을 다시 보조기둥에서 목표기둥으로 옮긴다(3단계). 내 제출 n ..

python 백준 알고리즘 2447번: 별 찍기 - 10

N의 패턴 -> ' '으로 채워진 가운데의 (N/3) x (N/3)의 정사각형을 크기 (N/3)의 패턴으로 둘러싼 형태. 결국 재귀를 돌면서 N은 최소단위는 3이 되고, 탈출경로로 N=3일때의 패턴을 만들어 리턴. ** 재귀함수 최대깊이 설정 import sys sys.setrecursionlimit(10**6) 파이썬의 재귀함수 기본 최대횟수가 1000회로 작아 대부분의 코딩테스트 문제에 적용시켜줘야 수월하다 ** '\n'.join '구분자(이 경우 줄넘김)'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합친다. ** input 과 sys.studin.readline 둘은 기능상 큰 차이가 없으나 속도차이가 크다. 백준은 입력값을 받아서 문제..

python 백준 알고리즘 25501번: 재귀의 귀재

문제에서 팰린드롬을 구하는 코드의 힌트를 거의 다 줘서 호출 횟수 부분만 신경써주면 된다. global을 이용, cnt 변수를 전역변수로 만들어 사용. 내 제출 def recursion(s, l, r): global cnt # 함수 내에서 전역 변수로 cnt를 활용하기 위해 global로 명시해준다. cnt += 1 if l >= r: return 1 elif s[l] != s[r]: return 0 else: return recursion(s, l+1, r-1) def isPalindrome(s): return recursion(s, 0, len(s)-1) for _ in range(int(input())): cnt = 0 print(isPalindrome(input().rstrip()), cnt)