본문 바로가기

전체 글

(47)
백준 1780번 종이의 개수 문제 설명 count_1은 -1로만 채워진 종이의 개수, count0은 0로만 채워진 종이의 개수, count1은 1로만 채워진 종이의 개수를 뜻한다. count_1,count0,count1을 전역변수로 선언하고 재귀함수의 인자로는 검사할 배열의 시작점 (a,b)와 종이의 길이 N을 넣어준다. (a,b)부터 시작하여 이중for문을 사용하여 종이를 확인하고 만약 해당 위치의 종이와 시작점 (a,b)의 종이와 다르다면 배열을 9등분하여 재귀함수를 호출한다. 이중for문을 통과하면 해당 종이는 모두 같은 종이로 되어있음을 뜻하므로 종이의 종류에 맞게 개수를 더해준다. 전체 코드 count_1 = 0 count0 = 0 count1 = 0 arr = [] def func(a,b,N): global count_1..
백준 2630번 색종이 만들기 문제 설명 bCount는 파란색 색종이의 수를 뜻하고 wCount는 하얀색 색종이의 수를 뜻한다. arr은 전체 종이를 담을 배열이다. 재귀함수의 인자로 a와 b는 해당 색종이의 시작점을 뜻한다. 첫 색종이는 [0,0]부터 시작하니 a=0,b=0이 된다. 시작점인 a와 b부터 색을 비교하고 만약 색이 다를 경우 a와 b에 N//2를 알맞게 더해 재귀함수를 다시 호출한다. 만약 이중for문을 통과할 경우에는 색종이의 색깔이 전부 같다는 뜻이므로 해당 색깔에 맞게 count를 늘려준다. 전체 코드 bCount = 0 wCount = 0 arr = [] def func(a,b,N): global bCount global wCount if N == 1: if arr[a][b] == 1: bCount += 1 e..
백준 11729번 하노이 탑 이동 순서 문제 설명 재귀함수의 인자로는 총 세 개를 설정했다. a에서 b로 n개 옮긴다는 뜻이다. n이 1이면 한 개만 옮기면 된다는 뜻이므로 a와 b를 출력했고 n이 1이 아닐 경우 a에서 b가 아닌 다른 쪽, 즉 6-a-b로 n-1개 옮긴 후 a에서 b로 옮긴 후 다시 6-a-b에서 b로 n-1개 옮기도록 했다. 전체 코드 def func(a,b,n): if n == 1: print("%d %d" % (a,b)) return 0 else: func(a,6-a-b,n-1) print("%d %d" % (a,b)) func(6-a-b,b,n-1) return 0 def main(): num = int(input()) print(2 ** num - 1) func(1,3,num) if __name__ == "__ma..
백준 17478번 재귀함수가 뭔가요? 문제 설명 재귀함수의 인자를 두 개로 설정하여 a는 재귀함수의 총 호출횟수를 뜻하고 b는 현재 재귀함수가 몇번째 재귀함수인지를 뜻한다. a와 b의 값이 같으면 마지막 재귀함수라는 뜻이고 같지 않으면 두번째 인자에 b에 1을 더하여 b+1을 넣어서 다시 재귀함수를 호출했다. 전체 코드 def func(a,b): for i in range(b): print('____', end='') print('"재귀함수가 뭔가요?"') if a == b: for i in range(b): print('____', end='') print('"재귀함수는 자기 자신을 호출하는 함수라네"') for i in range(b): print('____', end='') print('라고 답변하였지.') return 0 else: ..
백준 1629번 곱셈 문제 설명 문제를 분석해보면 A의 B제곱을 C로 나눈 나머지는 A의 B/2제곱을 C로 나눈 나머지를 알면 알 수 있다. 이 뜻은 K제곱을 계산했으면 2K제곱과 2K+1제곱을 계산할 수 있다는 뜻이다. 그래서 B가 1이면 A % C를 리턴하고 그렇지 않으면 B를 2로 나눈 값을 인자로 넣어 재귀함수를 실행한다. 전체 코드 def func(a,b,c): if b == 1: return a % c val = func(a,b//2,c) val = val * val % c if b % 2 == 0: return val else: return val * a % c def main(): li = list(map(int,input().split())) print(func(li[0],li[1],li[2]))
프로그래머스 level1 크레인 인형뽑기 게임 문제 설명 answer는 없어진 인형의 갯수고 stack은 바구니다. moves 배열의 크기만큼 for문을 반복하여 board에 인형이 없으면 continue로 스킵하고 있으면 해당 인형의 번호를 peek에 넣는다. 만약 바구니에 인형이 있다면 바구니의 가장 위에 있는 인형과 peek을 비교하여 같으면 pop을 하고 board의 값을 0으로 바꿔준다. 없으면 그대로 바구니에 넣고 board의 값을 0으로 바꿔준다. 전체 코드 def solution(board, moves): answer = 0 stack = [] for i in range(len(moves)): for j in range(len(board)): if(board[j][moves[i]-1] == 0): continue peek = board..
프로그래머스 level1 다트 게임 문제 설명 변수는 총 세 개로 설정했다. answer는 점수 합계, points는 점수를 저장해놓는 배열, num은 한 번 던질 때 얻은 점수다. for문을 사용하여 dartResult에서 값을 하나씩 빼와서 알파벳인지 확인한다. 알파벳이면 해당 알파벳이 S면 그대로 points에 append하고 D면 제곱을 하여 append하고 T면 세제곱을 하여 append 한다. 마지막으로는 num을 ''으로 초기화한다. dartResult에서 빼온 값이 숫자면 num에 덧붙여준다. 덧붙이는 이유는 한 자리 수만 있는게 아니라 10까지 있으므로 +=을 사용했다. dartResult에서 빼온 값이 알파벳도 아니고 숫자도 아닐 경우에는 해당 값이 *인지 #인지로 나누었다. *일 경우에는 또 두 가지 경우로 나누었는데 ..
프로그래머스 level1 실패율 문제 설명 rate는 실패율이 저장되어 있는 배열이고 counts는 해당 스테이지까지 도달하지 못한 유저의 수다. for문을 사용하여 1부터 전체 스테이지까지 돌고 if문을 사용하여 해당 스테이지에 도달한 유저가 있는지 체크한다. 그래서 있을 경우 해당 스테이지를 도전 중인 유저의 수 / 해당 스테이지를 클리어 한 유저의 수 를 rate에 append 하고 없을 경우에는 0을 append 한다. counts += stages.count(i)는 예를 들어 3번 스테이지까지 도달하지 못한 유저의 수는 1번 스테이지를 도전 중인 사람의 수 + 2번 스테이지를 도전 중인 사람의 수여서 저렇게 계산했다. 모든 실패율을 계산한 후 sort 함수를 사용하여 내림차순으로 정렬한다. sort_rate 함수의 값을 사용하..