본문 바로가기

파이썬/파이썬 백준5

[파이썬]10997:별 찍기 - 22 문제 링크 요약 문제 난이도: 3/10(실버 2) 문제 타입: 재귀 특이 사항: 낚시성 케이스 존재 개요 알고리즘 문제에서 가장 잘 알려진 형태인 별을 출력하는 문제입니다. N번째에 출력할 형태는 N-1번째 출력을 포함하고 있는 재귀적인 형태의 구조입니다. 예를 들어, 밑의 사진처럼 N=3일 때의 출력은 N=2일 때의 출력을 가운데에 포함하고 있습니다. 이전에 별 찍기와 연관된 문제를 푼 적이 있다면, 조금 응용하여 풀 수 있는 문제입니다. 문제 풀이 미리 정리해 놓고 가야 할 것 해당 문제는 재귀적인 함수호출을 연습하기 위해 만들어진 문제입니다. 출력의 사이즈는 다음과 같은 관계를 가집니다. 가로: 4 * N - 3, 세로: 4 * N - 1 N번째 출력은 N - 1번째의 출력을 중심으로 두고, 양옆으.. 2023. 5. 22.
백준 1307:마방진 코드수정 마방진 에서 데코레이터 부분 및 타입 어노테이션, 독스트링등을 작성하였다. map에 들어가는 함수에 parameter가 두개가 필요한데, 하나만 쓰는 방법만 알고 여러개를 사용하는 방법을 몰라서 새로 공부해서 적용해 보았다. functools.partial에서 d를 고정으로 적용하였더니 작동했다. def iterize(function): def wrapper(x, d): if isinstance(x, list): return list(map(functools.partial(wrapper, d=d), x)) else: return function(x, d) return wrapper @iterize def magic_plus(x, d): return x + ((N // 2) ** 2) * d import .. 2022. 6. 19.
1307:마방진 풀기 3, 4일차 결론적으로 풀었다! 그런데 아직 해야할 문제가 많이 남아있다.. 일단 코드가 너무 길고, 성능이 엄청 딸리진 않는데, 개선의 부분이 있을 것 같다. 제대로 만드려면 모든 마방진을 구현할 수 있는 알고리즘이 필요한데 그게 의문이다. 현재로써는 단순히 n을 넣으면 n * n에 해당하는 마방진 단 하나가 나오는데, 4 * 4는 880개의 마방진이 존재하고, 5 * 5 는275,305,224개가 존재한다니 참으로 엄청날 수가 없다. 모든 경우의 수를 제공 할 순 없겠지만, 100개정도는 랜덤으로 제공해야 제대로 된 알고리즘이 될거라고 생각한다. 아니면 차원을 높여서 3d구조의 마방진을 만드는것도 나쁘지 않을 것 같다. 그리고 1일차에 소개한 논문의 strachey 알고리즘이 끝까지 소개되어 있지 않은 상태였다... 2022. 6. 16.
마방진:1307 2일차. 오늘도 마방진문제에 대하여서 풀고 있다. 그전에 무작정 논문에 나온 알고리즘을 분석하여 적용하려 했는데, 구현이 꽤나 까다로운 것 같아 방향을 틀었다. 일단 마방진을 구현하기 위해서 시간 분석도는 차차하고, n이 홀수일때, O(N^2)안에 수행되는 de la Loubère의 알고리즘을 이용하기로 했다. def make_odd_magicsquare(n): #n^2크기 배열 생성 arr = [[0 for _ in range(n)] for _ in range(n)] #초기 인덱스 첫번째 행의 가운데 위치 now를 설정 now = [n // 2, 0] #주어진 규칙으로 숫자를 n^2번 배정한다. for i in range(1, n**2 + 1): x, y = now arr[y][x] = i new_x = x +.. 2022. 6. 14.