백준 알고리즘 87

백준 1654번 랜선 자르기 문제풀이, 파이썬

백준 1654번 : 랜선 자르기 문제풀이 [파이썬] 1654번 문제의 내용은 아래와 같습니다. 랜선 자르기 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개..

백준 알고리즘 2023.03.16

[알고리즘] 이진 탐색 알고리즘(1)

본 포스팅에서는 이진 탐색 알고리즘에 대한 정리 내용을 담고있습니다. (본 알고리즘 포스팅은 유튜브 '이코테 2021 강의'를 참고하여 작성하였습니다.) https://www.youtube.com/@dongbinna 동빈나 www.youtube.com 순차 탐색과 이진 탐색 순차 탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 이진 탐색의 동작 예시) 이미 정렬된 10개의 데이터 중에서 값이 4인 원소 찾기 시작점 : index 0, 끝점 : [9], 중간점 : [4] (소수점 이하는 제거) 우리가 찾고자 하는 원소 4보다 중간점의 원소 8이 큰 상황임. 따라서 중간점..

백준 25501번 재귀의 귀재 문제풀이, 파이썬

백준 25501번 : 재귀의 귀재 문제풀이 [파이썬] 25501번 문제의 내용은 아래와 같습니다. 재귀의 귀재 문제 정휘는 후배들이 재귀 함수를 잘 다루는 재귀의 귀재인지 알아보기 위해 재귀 함수와 관련된 문제를 출제하기로 했다. 팰린드롬이란, 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은 문자열을 말한다. 팰린드롬의 예시로 AAA, ABBA, ABABA 등이 있고, 팰린드롬이 아닌 문자열의 예시로 ABCA, PALINDROME 등이 있다. 어떤 문자열이 팰린드롬인지 판별하는 문제는 재귀 함수를 이용해 쉽게 해결할 수 있다. 아래 코드의 isPalindrome 함수는 주어진 문자열이 팰린드롬이면 1, 팰린드롬이 아니면 0을 반환하는 함수다. #include #include int recursion(..

백준 알고리즘 2023.03.13

백준 10870번 피보나치 수 5 문제풀이, 파이썬

백준 10870번 : 피보나치 수 5 문제풀이 [파이썬] 10870번 문제의 내용은 아래와 같습니다. 피보나치 수 5 문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 n번째 ..

백준 알고리즘 2023.03.12

백준 10872번 팩토리얼 문제풀이, 파이썬

백준 10872번 : 팩토리얼 문제풀이 [파이썬] 10872번 문제의 내용은 아래와 같습니다. 팩토리얼 문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다. 출력 첫째 줄에 N!을 출력한다. 예제 입력 1 복사 10 예제 출력 1 복사 3628800 예제 입력 2 복사 0 예제 출력 2 복사 1 #팩토리얼 - 재귀 N = int(input()) def factorial(num): ans = 1 if num > 0: ans = num * factorial(num-1) return ans print(factorial(N)) 본 문제를 for 문을 사용해서 풀어도 되지만, 문제 분류가 '재귀'로 되어있어서 재귀함..

백준 알고리즘 2023.03.12

백준 11478번 서로 다른 부분 문자열의 개수 문제풀이, 파이썬

백준 11478번 : 서로 다른 부분 문자열의 개수 문제풀이 [파이썬] 11478번 문제의 내용은 아래와 같습니다. 서로 다른 부분 문자열의 개수 문제 문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오. 부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다. 예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다. 입력 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. 출력 첫째 줄에 S의 서로 다른 부분 문자열의 개수를 출력한다. 예제 입력 1 ..

백준 알고리즘 2023.03.11

백준 1269번 대칭 차집합 문제풀이, 파이썬

백준 1269번 : 대칭 차집합 문제풀이 [파이썬] 1269번 문제의 내용은 아래와 같습니다. 대칭 차집합 문제 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다. 입력 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가..

백준 알고리즘 2023.03.11

백준 1764번 듣보잡 문제풀이, 파이썬

백준 1764번 : 듣보잡 문제풀이 [파이썬] 1764번 문제의 내용은 아래와 같습니다. 듣보잡 문제 김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. 듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다. 출력 듣보잡의 수와 그 명단을 사전순으로 출력한다. 예제..

백준 알고리즘 2023.03.09

백준 10816번 숫자카드2 문제풀이, 파이썬

백준 10816번 : 숫자카드2 문제풀이 [파이썬] 10816번 문제의 내용은 아래와 같습니다. 숫자 카드 2 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의..

백준 알고리즘 2023.03.08

백준 1620번 나는야 포켓몬 마스터 이다솜 문제풀이, 파이썬

백준 1620번 : 나는야 포켓몬 마스터 이다솜 문제풀이 [파이썬] 1620번 문제의 내용은 아래와 같습니다. 오박사 : 그럼 다솜아 이제 진정한 포켓몬 마스터가 되기 위해 도감을 완성시키도록 하여라. 일단 네가 현재 가지고 있는 포켓몬 도감에서 포켓몬의 이름을 보면 포켓몬의 번호를 말하거나, 포켓몬의 번호를 보면 포켓몬의 이름을 말하는 연습을 하도록 하여라. 나의 시험을 통과하면, 내가 새로 만든 도감을 주도록 하겠네. 입력 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어. 둘째 줄부터..

백준 알고리즘 2023.03.08