FizzBuzz 문제란?숫자 n이 주어졌을 때, 1부터 n까지의 모든 숫자를 문자열 형태로 표현하는 것이 목표입니다. 단, 아래 세 가지 규칙을 반드시 따라야 합니다.숫자가 3으로 나누어떨어지면 해당 숫자 대신 Fizz를 넣습니다.숫자가 5로 나누어떨어지면 해당 숫자 대신 Buzz를 넣습니다.숫자가 3과 5 모두로 나누어떨어지면 해당 숫자 대신 FizzBuzz를 넣습니다.FizzBuzz는 코딩 인터뷰에서 자주 등장하는 대표적인 입문 문제로, 조건문과 반복문의 기본 개념을 점검하기에 좋은 예제입니다.문제 해결 접근 방법이 문제는 조건
이진 행렬(binary matrix) mat이 주어졌다고 가정해 보겠습니다. 우리가 해야 할 작업은 행렬의 각 행을 선택해 순서를 거꾸로 뒤집은 다음, 행 내의 모든 비트를 반전시키는 것입니다. 즉, 0은 1로, 1은 0으로 바꿉니다.문제 예시예를 들어 입력이 다음과 같다면,110010001출력 결과는 다음과 같습니다.100101011풀이 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.행 인덱스를 나타내는 변수 track을 0으로 초기화합니다.mat의 각 행에 대해 다음을 수행합니다.해당 행을 뒤집습니다(reverse).
여러 개의 단어로 이루어진 목록이 있을 때, 각 단어를 한 줄씩 사각형 프레임 안에 정렬해야 하는 문제가 있다고 가정해 봅시다. 아래 예시를 보면 더 쉽게 이해할 수 있습니다.예를 들어, 입력이 [hello, world, python, programming, nice]라면 출력 결과는 다음과 같습니다.*************** * hello * * world * * python * * programming * * nice * ***************해결 접근 방식이 문제는 다음과 같은
프로그래밍 문제에서 자주 만나게 되는 유형 중 하나는 구간(Interval) 데이터를 다루는 것입니다. 이번 글에서는 여러 개의 근무 시간 구간과 하나의 특정 시간이 주어졌을 때, 그 시점에 실제로 근무 중인 프로그래머가 몇 명인지 계산하는 방법을 알아보겠습니다.문제 정의구간 목록과 하나의 시간 값(time)이 입력으로 주어집니다. 각 구간은 [시작, 종료] 형태로 표현되며, 해당 프로그래머가 일한 시간대를 나타냅니다. 우리의 목표는 주어진 시간에 근무 중이던 프로그래머의 수를 구하는 것입니다.예를 들어 입력이 다음과 같다고 가정해
Python에서 n 이하의 소수 목록 생성 방법숫자 n이 하나 주어졌다고 가정해 봅시다. 이때 n보다 작거나 같은 모든 소수(prime number)를 오름차순으로 정렬된 리스트 형태로 생성해야 합니다. 여기서 한 가지 주의할 점은 1은 소수가 아니라는 사실입니다.예를 들어 입력값이 12라면, 출력 결과는 다음과 같습니다.[2, 3, 5, 7, 11]문제 해결 접근 방식이 문제는 고전적인 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘을 활용하면 효율적으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다.
문제 개요양의 정수로 이루어진 리스트 nums가 주어졌을 때, 리스트의 모든 숫자를 나눌 수 있는 가장 큰 양의 정수, 즉 최대공약수(GCD)를 구하는 문제입니다.예를 들어 입력이 [14, 28, 70, 56]이라면, 이 네 숫자를 모두 나눌 수 있는 가장 큰 수는 14이므로 출력 결과는 14가 됩니다.해결 접근 방법최대공약수에는 다음과 같은 중요한 성질이 있습니다.gcd(a, b, c) = gcd(gcd(a, b), c)즉, 두 수씩 차례대로 최대공약수를 구하다 보면 전체 리스트의 최대공약수를 얻을 수 있습니다. 이 성질을 활용한
문제 설명숫자로 이루어진 리스트 nums가 주어졌을 때, 이 리스트를 하나 이상의 그룹으로 나눌 수 있는지 확인해야 합니다. 단, 나눈 그룹은 다음 세 가지 조건을 모두 만족해야 합니다.각 그룹의 크기는 2 이상이어야 합니다.모든 그룹의 크기는 서로 같아야 합니다.같은 그룹 안에 들어 있는 숫자는 모두 동일해야 합니다.예를 들어 입력이 [3, 4, 6, 9, 4, 3, 6, 9]라면 결과는 True입니다. 각 숫자(3, 4, 6, 9)가 정확히 두 번씩 등장하므로, 같은 숫자끼리 두 개씩 묶어 총 네 개의 그룹을 만들 수 있기 때문
음이 아닌 수 n이 주어졌을 때, r * r = n을 만족하는 수 r을 찾고, 그 값을 가장 가까운 정수로 내림(버림)해야 하는 문제가 있습니다. 단, 파이썬의 내장 제곱근 함수(예: math.sqrt())는 사용할 수 없습니다.예를 들어 입력값이 1025라면, 32 × 32 = 1024 ≤ 1025이므로 출력은 32가 됩니다.문제 해결 접근 방법이 문제는 이진 탐색(Binary Search)을 활용하면 효율적으로 해결할 수 있습니다. 탐색 범위를 절반씩 줄여가면서 조건을 만족하는 최댓값을 찾는 방식입니다.알고리즘 단계n이 1 이하
어떤 양의 정수 n이 주어졌을 때, 이 숫자가 행복한 수(Happy Number)인지 판별하는 문제를 살펴보겠습니다. 행복한 수(Happy Number)란? 행복한 수는 임의의 양의 정수에서 시작하여, 그 수를 각 자릿수의 제곱의 합으로 반복해서 대체했을 때 최종적으로 1에 도달하는 수를 의미합니다. 만약 1에 도달하지 못하고 같은 값들이 무한히 반복되는 사이클에 빠진다면 그 수는 행복한 수가 아니며, 과정을 거쳐 1에 도달하는 모든 수가 행복한 수입니다. 예시: 19는 행복한 수일까? 입력이 19일 때 결과는 true입니다.
숫자 n이 주어졌을 때, 이 숫자의 어느 위치에든 5를 한 번 삽입하여 만들 수 있는 최댓값을 찾는 문제입니다. 예를 들어 입력이 n = 826이라면, 5를 첫 번째 자리 뒤에 삽입한 8526이 만들 수 있는 값 중 가장 큽니다. 해결 접근 방법 이 문제는 숫자를 문자열로 다루면 간단하게 해결할 수 있습니다. 핵심 아이디어는 5를 삽입할 수 있는 모든 위치를 시도해 보고, 그중 가장 큰 값을 선택하는 완전 탐색 방식입니다. 단계별로 살펴보겠습니다. temp := n을 문자열로 변환한 값 ans := 음의 무한대(-inf)로 초기화
Python 프로그래밍에서 nums라는 숫자 리스트가 주어졌을 때, 리스트 안에서 가장 자주 등장하는 요소를 찾고, 그 요소가 총 몇 번 나타나는지 빈도를 구하는 방법을 알아보겠습니다. 예를 들어 입력 리스트가 [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]이라면, 숫자 5가 세 번 등장하므로 출력 결과는 3이 됩니다. 알고리즘: 단계별 접근 방법 이 문제는 두 개의 중첩 반복문을 사용해 모든 요소 쌍을 서로 비교하는 방식으로 해결할 수 있습니다. 해결 과정은 다음과 같습니다. 최대 빈도를 저장할 변수 m
문제 개요정렬된 숫자 리스트가 주어졌을 때, 각 요소를 제곱한 결과를 다시 정렬된 순서로 반환하는 문제입니다. 입력 리스트에는 음수와 0도 포함될 수 있다는 점이 특징입니다.예를 들어, 입력이 [-12,-6,-5,-2,0,1,2,4,8,9,10,15,18,20,35,38,69]라면 출력은 다음과 같습니다.[0, 1, 4, 4, 16, 25, 36, 64, 81, 100, 144, 225, 324, 400, 1225, 1444, 4761]해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.새로운 리스트 L을 생성합니다.nu
문제 개요하나의 문자열 s와 두 개의 정수 i, j(i < j)가 주어졌다고 가정해 봅시다. 이때 p는 문자열 s를 무한히 반복해서 이어 붙인 문자열입니다. 우리의 목표는 p에서 인덱스 범위 [i, j)에 해당하는 부분 문자열을 찾는 것입니다.예를 들어, 입력이 s = programmer, i = 4, j = 8이라면 출력은 ramm이 됩니다.무한 문자열을 실제로 만들 필요는 없습니다. 반복 문자열의 성질을 이용하면 간단하게 해결할 수 있습니다.접근 방법핵심 아이디어는 모듈로(%) 연산입니다. 무한히 반복되는 문자열 p에서 t
문제 설명 숫자로 이루어진 리스트 nums가 주어졌다고 가정해 봅시다. 우리는 리스트를 제자리(in-place)에서 직접 수정하여 모든 0을 리스트의 끝으로 옮겨야 합니다. 이때 나머지 요소들의 상대적인 순서는 그대로 유지되어야 하며, O(1)의 추가 공간만 사용해 문제를 해결하는 것이 목표입니다. 예를 들어 입력이 [2,0,1,4,0,5,6,4,0,1,7]이라면, 출력은 다음과 같습니다. [2, 1, 4, 5, 6, 4, 1, 7, 0, 0, 0] 풀이 접근 방법 핵심 아이디어는 매우 간단합니다. 0이 아닌 요소들을 앞쪽부터 차
문제 소개 하나의 정수 n이 주어졌을 때, 이 숫자를 3진수(base 3)로 변환한 결과를 문자열 형태로 구하는 것이 목표입니다. 예를 들어 입력이 17이라면 출력은 122가 됩니다. 실제로 17은 1×3² + 2×3¹ + 2×3⁰ = 9 + 6 + 2 = 17이므로, 3진수로 표현하면 122에 해당합니다. 해결 알고리즘 10진수를 임의의 진법으로 변환할 때 가장 널리 쓰이는 방식은 반복적인 나눗셈과 나머지 계산입니다. 참고로 파이썬에는 2진수를 위한 bin(), 16진수를 위한 hex() 같은 내장 함수가 있지만, 3진수를 위한
문자열 인터리빙이란?두 개의 문자열 s와 t가 주어졌을 때, 첫 번째 문자열 s부터 시작하여 두 문자열의 문자를 번갈아 가며 교차 배치하는 새로운 문자열을 만드는 문제를 생각해 봅시다. 만약 한쪽 문자열에 문자가 남아 있다면, 남은 문자들은 결과 문자열의 끝에 그대로 추가됩니다.예를 들어, 입력이 s = abcd, t = pqrstu라면 출력은 apbqcrdstu가 됩니다. 두 문자열 중 t가 더 길기 때문에, 앞부분은 a, p, b, q, c, r, d 순서로 교차되고, 남은 stu는 마지막에 붙게 됩니다.해결 접근 방법이 문제는
여러 개의 구간(interval) 목록이 있다고 가정해 보겠습니다. 각 구간은 [시작, 끝] 형태로 표현되며, 시작 시점과 끝 시점을 모두 포함하는(inclusive) 범위를 나타냅니다. 이때 구해야 할 것은 이 구간들의 교차 구간(intersection), 즉 주어진 모든 구간에 공통으로 속하는 구간입니다.예를 들어 입력이 [[10, 110], [20, 60], [25, 75]]라면, 세 구간 모두에 포함되는 범위는 [25, 60]이므로 출력 결과는 [25, 60]이 됩니다.문제 해결 접근 방법이 문제는 다음 단계를 통해 해결할
문제 개요어떤 수 a가 주어졌을 때, n! = a를 만족하는 정수 n을 찾는 것이 이번 글의 목표입니다. 팩토리얼은 n! = n × (n−1) × (n−2) × … × 1로 정의되며, 조건을 만족하는 정수 n이 존재하지 않으면 −1을 반환해야 합니다.예를 들어 입력이 a = 120이라면, 5! = 5 × 4 × 3 × 2 × 1 = 120이므로 출력은 5가 됩니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.i := 0, num := 1로 초기화합니다.빈 리스트 L을 생성합니다.i < a인 동안 반복합니다.i
숫자 리스트 nums와 정수 k가 주어졌을 때, 리스트에서 정확히 한 개의 요소를 제거하여 나머지 요소들의 평균이 정확히 k가 되도록 할 수 있는지 확인해야 합니다. 이 문제에는 다음과 같은 제약 조건이 있습니다. 2 ≤ n ≤ 1,000 (n은 nums 리스트의 요소 개수) nums[i] ≤ 1,000,000, k ≤ 1,000,000 예를 들어 입력이 [5,3,2,4,6,10]이고 k = 4라면 결과는 True입니다. 10을 제거하면 나머지 요소들의 평균이 (5+3+2+4+6)/5 = 4가 되어 k와 같아지기 때문입니다. 해
문제 개요숫자로 이루어진 리스트 nums가 주어졌을 때, 어떤 수 k와 그 음수인 -k가 모두 리스트 안에 존재하는 경우 중 가장 큰 k를 찾는 것이 이번 문제의 목표입니다. 만약 그러한 조건을 만족하는 원소가 하나도 없다면 -1을 반환해야 합니다.예를 들어, 입력이 [-5, 2, 9, -6, 5, -9]라면 9와 -9가 모두 존재하므로 정답은 9가 됩니다.해결 접근 방법이 문제는 양수와 음수를 분리한 뒤 정렬하여 비교하는 방식으로 효율적으로 풀 수 있습니다. 구체적인 풀이 단계는 다음과 같습니다.L1 := nums에서 0과 양수만