개발 공부/알고리즘 문제풀이 56

[삼성SW테스트 준비] 순열과 조합 연습 문제-1 (백준 15649, 15654, 15655, 15657, 15663, 15664, 15665, 15666)

문제 출처: 알파카고수님(https://m.blog.naver.com/wpghks7/221585604878)의 블로그 [파이썬으로 시작하는 삼성 SW역량테스트] - 4. 순열과 조합 ※실제 시험 시itertools 모듈이 사용 불가능하다는 말이 있습니다. 게시글은 나중에 수정하겠습니다. 이번... blog.naver.com DFS로 순열과 조합을 직접 구현하며 정리해보았다. (DFS로 순열 구현하기는 사과농장님의 블로그를 참고했다!) 순열, 조합 with dfs def permutation(depth, r, arr, visited, result): #순열 nPr if depth == r: print(result) return for i in range(len(arr)): if visited[i]: con..

[백준]11729. 하노이 탑 이동 순서

11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 풀이 이 문제도 옮긴 횟수 K의 규칙성은 알겠는데, 이동하는 것을 출력하는 부분에서 막혀 한참 고민하다 블로그를 찾아보았다. 저번에 별찍기 문제에서도 도움을 받은 분이었는데, 하노이 탑이 왜 재귀 함수를 사용해서 풀어야 하는 문제인지 단계별로 그림과 함께 설명해주셔서 이해하기 쉬웠다.(https://mgyo.tistory.com/185) '하노이의 탑' 이해하기 (feat. 재귀 함수) 들어가며 하노이의 탑 문제 소개 문제 정의 아이디어 얻기 아이디어..

[백준] 2447. 별 찍기 - 10

2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 이번 문제는 정말 어려웠다...! 한참을 고민해도 답을 찾지 못해서, 푸신 분들의 블로그를 찾다가 재귀를 활용해 굉장히 간단하게 구현하신데다 설명도 이해하기 쉽게 써주신 분의 블로그를 참조해 문제를 풀 수 있었다!(https://mgyo.tistory.com/183) [백준] 2447번 별찍기 문제 재귀 함수 이용해서 풀기 문제 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 ..

[백준] 17478. 재귀함수가 뭔가요?

17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 풀이 처음 봤을 때는 '이게 뭐람?' 싶었지만 출력 예시를 잘 뜯어보면 재귀를 사용해서 풀 수 있는 쉬운 문제! 앞의 '____'(----가 아니다! 처음에 ----인 줄 알고 이걸로 풀었더니 틀렸었다.) 의 개수가 몇 개씩 늘어나는지, 어떤 문장이 몇번 반복되고 있는지를 체크해보며 풀면 된다. #17478 재귀함수가 뭔가요? def recursion(N, lines): print(lines + '\"재귀함수가 뭔가요?\"') if N > 0: print(lin..

[백준] 10872 팩토리얼, 10870 피보나치 수 5

10872번: 팩토리얼 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 팩토리얼은 3가지 방법으로 풀었다. 재귀 함수로 한번, 반복문을 이용해 한번, 파이썬 자체적인 내장함수를 이용해 한번. 내장함수를 쓰는 방법이 제일 오래 걸렸다. # 10872 팩토리얼 # 첫 번째 방법: 재귀함수 def fact(N): if N > 0: return N * fact(N-1) else: return 1 N = int(input()) ret = fact(N) print(ret) # 두 번째 방법 : 반복문 활용 N = int(input()) sum = 1 for i in range(N, 0, -1): sum *= i prin..

[백준] 4948. 베르트랑 공준

4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 처음에 이렇게 풀었는데 시간 초과가 났다 # 4948 베르트랑 공준 import math def isPrime(n): cnt = 0 for num in range(n + 1, 2 * n + 1): sq = int(math.sqrt(num)) flag = False for i in range(2, sq+1): if num % i == 0: flag = True break if flag is True: continue else: cnt += 1 return ..

[백준] 1929. 소수 구하기

1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 첫번째 시도: 이전처럼 2부터 n-1까지 모든 수로 n을 나누며 소수를 판별하는 방법을 사용했는데 시간초과가 났다. 두번째 시도: 아래 블로그 글을 참고해 제곱근을 활용하여 2부터 n-1이 아니라 2부터 제곱근까지로 나누어 소수를 판별하도록 알고리즘을 짰다. [백준 알고리즘] 백준 1929번 소수 구하기 파이썬(Python) 츄르사려고 코딩하는 코집사입니다. 1. [백준 알고리즘] 백준 1929번 소수 구하기 파이썬(Python) 1) 문제번호 : 1929번 2) 문제 출처 https://ww..

[백준] 11653. 소인수분해

11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 원리는 N을 나누어 떨어지게 하는 수가 소수인지 여부를 판별하고, 소수이면 해당 수를 출력한 뒤, N에는 해당 소수로 나눈 몫을 저장해 N이 1이 될 때까지 반복문을 돌리며 나누는 소수를 출력하도록 했다. 하지만 내 생각보다 시간이 많이 걸렸다. 제곱근을 안쓰고 2부터 num까지 수로 모두 num을 나눠서 소수를 판별했기 때문일 것이다. # 11653 소인수분해 (2192ms) N = int(input()) cnt = 0 while N > 1: for num in range(2, N+1): flag = False if N % num == 0: for z in range(2, num)..