본문 바로가기

PYTHON91

SWEA D3 16800. 구구단 걷기 (python) 구구단 걷기 풀이 무한한 A*B 행렬(인덱스가 1부터 시작하는)의 칸이 있다고 할 때, 각 칸은 각 인덱스를 곱한 숫자가 들어간다. 예시에서도 말했듯이 9*9라면 구구단값이 들어있다. 이런 행렬이 있다고 가정하고, 주어지는 N의 값이 있는 칸으로 이동하려고 할 때, 가장 적은 이동을 할 수 있다면 몇 칸을 이동하는지를 출력하는 문제이다. 기본적으로 root값인 인덱스에 가까울수록 가장 적은 이동수를 제공한다. 예시는 아래와 같다. 값이 16이 있는 칸으로 움직여야할 때 (1,1) -> (1,16)15칸(0+15) 이동 (1,1) -> (2,8)8칸(1+7) 이동 (1,1) -> (4,4)6칸(3+3) 이동 따라서 (4,4)로 움직이는 것이 가장 적은 이동이고, 이동 칸 수는 6칸이다 이런 생각을 가지고 .. 2024. 2. 24.
프로그래머스 Lv2 모음사전 (python) 모음사전 풀이 완전탐색문제이고, 문제를 보니 재귀로 풀어도 깊이 문제가 생기지 않을 것이라고 확신했기에 재귀로 풀었다. 따라서 for 문을 사용한 재귀를 사용하였고, 프로그래머스 문제의 특성상 global을 많이 사용하게 되어 머리가 잠시 삐로롱 되었지만, 금방 풀 수있었다. 초기에 필요한 변수들을 초기화해주고, solution에서도 초기화 과정을 거쳐준다. 그리고 aeiou에 매개변수로 string의 length인 number, 문자열, 찾고 있는 문자열로 3개의 매개변수를 이용했다. aeiou를 for문으로 돌면서 모음사전인 vowel_dictionary에 추가 시키기로 했다.(지금보니 안해도 되는 과정이었다.) 그리고 index를 +1 해주면서, 몇 번째에 찾는 단어가 현재의 단어인지 확인하는 과정.. 2024. 2. 23.
SWEA D3 7584. 자가 복제 문자열 (python) 자가 복제 문자열 풀이 문제를 보고 문제에서 원하는 방향대로 해서 f함수와 g함수를 만들고 그것을 문제에서 제공한 풀이법 대로 풀어서 아래처럼 만들었다. # Pn을 구하기 위함 함수 def p_time(K): length_n = 1 n = 0 # 길이가 K보다 작을때만 while length_n < K: n += 1 length_n = length_n + 1 + length_n return n # 문자 반전 def f(A): tmp_A = "" for i in range(len(A)): if A[i] == '0': tmp_A += '1' else: tmp_A += '0' return tmp_A # 문자열 좌우 반전 def g(A): reverse_A = "" for j in range(len(A)-1,-.. 2024. 2. 21.
백준 실버3 1966. 프린터 큐 (python) 프린터 큐 풀이 큐의 방식에 대해서 고려한다면 금방 풀 수 있을 것 같다 생각했고, 예상은 맞았다. 아래처럼 우선 Q를 while문으로 Q값이 있을 때 반복했다. 그리고 Q [0]가 최댓값이면 출력하고 아니면 마지막으로 옮기는 작업을 하는 과정에서 M과 출력 순서인 number를 건드렸다. import sys # 테스트 케이스 수 T = int(sys.stdin.readline()) for i in range(T): # 문서갯수 N, 궁금한 문서는 몇 번째? M N, M = map(int, sys.stdin.readline().split()) # Q리스트 Q = list(map(int, sys.stdin.readline().split())) # Q가 있을 때만 작동 number = 0 while Q: #.. 2024. 2. 20.
프로그래머스 Lv2 행렬의 곱셈 (python) 행렬의 곱셈 풀이 문제가 무슨 아무 설명도 없어서 뭐 어떻게 풀라고 하다가, 질문하기에 있는 내용을 보고 행렬의 곱셈이라는 수학 공식이 있음을 알고 풀었다. lv2로 오고 나서는 내 머리가 지끈 거린다. 단순 머리로만은 못 풀고 이젠, 손도 같이 써서 작업을 해야 할 듯하다. arr1의 길이 즉 행을 a로 반복하고, arr2 [0]의 길이 즉 arr2의 열을 반복하면서 더할 값을 넣어두고, arr2의 길이 즉 arr2의 행을 반복하면서 값들을 곱하고 더해주고 빠져나오면 tmp_row에 넣어준다. 글을 작성하면서도 괜히 헷갈린다. def solution(arr1, arr2): answer = [] for a in range(len(arr1)): tmp_row = [] # 각 행에 대한 결과를 저장할 임시 .. 2024. 2. 18.
프로그래머스 Lv2 하노이의 탑 (python) 하노이의 탑 풀이 재귀로 풀어야 된다는 것도 알고 있었고, 이전 홀수나 짝수에 쓰였던 값이 다음 홀수, 짝수 값에서 재사용된 다는 것도 알고 있었지만, 어떻게 구현을 해야 하는지 계속 골골대다가 결국은 힌트를 보고 풀었다. 아직 내 머리는 이런 알고리즘들을 제대로 구현해내는 것이 불가능한가... 더 빨리 성장시켜서 예전에 이 정도는 껌으로 풀던 시절로 돌아가야지. 내 기존 풀이법은 완전탐색처럼 하는 방법이었으나, 그러니까 재귀함수가 너무 깊이 들어가서 실패를 계속했다. 그러다 보니 내가 바라보던 풀이 방식에서는 풀리지가 않았다. 그래서 힌트를 찾아보니 아래처럼 풀어야하는 것이 정석인 듯했다. 후.... 코드가 엄청 짧은 것을 보니 아직 내 실력은 한참이군.. 흑 잘 키우던 캐릭터가 사망하고 1 레벨부터 .. 2024. 2. 17.