알고리즘 21

백준 11726 2xn 타일링 파이썬 풀이

https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제이해 입력받은 n만큼 세로 2 가로 n길이의 직사각형에 1x2 혹은 2x1 타일로 채우는 방법의 수를 구하면 된다. n의 입력값이 1000이기에 O(n^2)로 풀어도 되겠다는 생각은 들었다. 접근법 완전탐색을 사용하려 보니 재귀함수를 사용해야할거 같다는 생각으로 이어졌다. 하지만 파이썬에서는 기본적으로 재귀함수의 깊이 제한이 걸려있기 때문에 dp를 사용해야한다. 그래서 dp방법으로 풀이를 해보고자 했다. 코드 im..

알고리즘 2024.02.07

백준 1181 단어정렬 파이썬 풀이

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 문제 이해 여러 단어들이 입력된다. 단어를 길이 순서로 출력하되 만약 같다면 사전 순으로 출력하면 된다. 단어의 개수는 최대 20000개까지 했으니 O(n^2)로 풀 경우 시간 초과가 뜰 수도 있겠다는 생각을 갖고 접근했다. 접근법 어떻게 풀어야할지 감이 안와서 일단 완전탐색으로 구현해보기로 했다. 문자열의 길이를 측정하고 그 길이에 따라 정렬하는 방식이다. 코드1(완전탐색) impor..

알고리즘 2024.02.07

백준 1003 피보나치 함수 파이썬 풀이

https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 문제 이해 피보나치 함수 문제는 피보나치를 재귀함수로 풀었을 때, 0과 1이 각각 몇 번씩 등장하게 되는지에 대한 문제이다. 문제에서는 코드 예시를 C언어로 해두었다. 문제에 들어가기 전에 파이썬은 재귀함수를 사용할때 늘 깊이에 대한 생각을 하지 않을 수 없다. 왜냐하면 파이썬 언어 내부적으로 재귀함수의 깊이를 1000회로 제한을 두었기 때문이다. https://url.kr/s72w3t 백준 1676 팩토리얼 0의 개수 파이썬 풀이 - recursionError https://www.acmic..

알고리즘 2024.02.07

백준 1676 팩토리얼 0의 개수 파이썬 풀이 - recursionError

https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 1 def factorial(num) : if num == 1: return 1 else : return (num * factorial(num - 1)) n = int(input()) count = 0 num = factorial(n) num = [x for x in str(num)] for i in range(len(num) - 1, -1, -1): if num[i] == '0' : count += 1 elif num[i] != '0' : break print(count) 처..

알고리즘 2024.01.19

백준 10992 별 찍기 - 17 파이썬 풀이

https://www.acmicpc.net/problem/10992 10992번: 별 찍기 - 17 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net 코드 n = int(input()) for i in range(n) : print(" " * (n - 1 - i), end="") if i == n - 1 : print("*" * (2 * n - 1)) elif 0 < i < n - 1: print("*" + " " * (2 * i - 1) + "*") else: # i == 0인 경우 print("*") 풀고 나서 느낀점은 나는 별 찍기 문제를 풀 때, 따로 깊게 로직을 생각하지 않는다는 것이었다. 반복해서 출력되니 반복문을 사용하고, 공백이 별 밖에, 별 사이에 있고, 별..

알고리즘 2024.01.18

백준 10991 별 찍기 - 16 파이썬 풀이

https://www.acmicpc.net/problem/10991 10991번: 별 찍기 - 16 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. www.acmicpc.net 코드 n = int(input()) for i in range(n) : print(" " * (n - i - 1), end="") print(("*" + " ") * (i + 1)) 접근법 별을, * 하나로 보지 않고 "* " ( * + " ") 공백으로 보면 수월할 거 같다는 생각을 했다. 첫 번째 print문은 공백 출력용도로 사용됐다. 입력값이 1일때 공백이 0, 입력값이 2일때 공백이 1로 시작해야해서 해주었고 -i는 점차 공백이 줄어들어야 하기 때문에 넣어줬다. 두 번째 print문은 앞서 말한 별과 공백 ("*" +..

알고리즘 2024.01.18

백준 2522 별 찍기 - 12 파이썬 풀이

https://www.acmicpc.net/problem/2522 2522번: 별 찍기 - 12 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net 코드 n = int(input()) for i in range(n) : print(" " * (n - 1 - i), end="") print("*" * (i + 1)) for i in range(1, n) : print(" " * i, end="") print("*" * (n - i)) 위, 아래로 반복문을 나누고 공백 출력, 별 출력으로 나누어서 출력하면 되겠다는 생각을 했다.

알고리즘 2024.01.18

백준 2445 별 찍기 - 8 파이썬 풀이

https://www.acmicpc.net/problem/2445 2445번: 별 찍기 - 8 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net 코드 n = int(input()) for i in range(1, n + 1) : print("*" * i, end="") print(" " * (2 *(n - i + 1) - 2), end="") print("*" * i) for i in range(1, n) : print("*" * (n - i), end="") print(" " * (2 * (i + 1) - 2), end="") print("*" * (n - i)) 위, 아래로 반 뚝 짤라서 출력시키고자 했다. 처음 프로그래밍 배울때는 저런 모양은 엄두도 못냈었던 거..

알고리즘 2024.01.18

백준 2442 별 찍기 - 5 파이썬 풀이

https://www.acmicpc.net/problem/2442 2442번: 별 찍기 - 5 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. www.acmicpc.net 코드 1 n = int(input()) for i in range(1, n + 1) : print(" " * (n - i), end="") print("*" * (2*i - 1)) 코드 2 n = int(input()) for i in range(n) : print(" " * (n - (i + 1)), end="") print("*" * (2*(i + 1) - 1)) 코드 3 n = int(input()) for i in range(1, n + ..

알고리즘 2024.01.18