복소수를 극좌표로 변환하기복소수 c가 주어졌을 때, 이를 극좌표 형태인 (반지름, 각도)로 변환하는 것이 목표입니다. 복소수는 일반적으로 x + yj 형태로 표현됩니다.여기서 각 성분은 다음과 같이 정의됩니다.반지름(radius): 복소수의 크기(magnitude)로, √(x² + y²)로 계산됩니다.각도(angle): 양의 x축에서 시작하여 원점과 점 x + yj를 잇는 선분 사이의 반시계 방향 각도입니다.파이썬에서는 cmath 라이브러리를 활용하면 손쉽게 구할 수 있습니다. phase() 함수로 각도를 계산하고, 복소수에 abs
여러 개의 요소로 구성된 리스트 nums가 있다고 가정해 보겠습니다. 이때 리스트에서 홀수 인덱스(0 기준)에 해당하는, 즉 두 번째·네 번째·여섯 번째… 위치에 있는 요소들만 골라내야 합니다.예를 들어 입력이 nums = [5,7,6,4,6,9,3,6,2]라면, 출력은 [7, 4, 9, 6]이 됩니다.문제 해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.파이썬의 리스트 슬라이싱(slicing) 기법을 활용합니다.인덱스 1부터 시작해서 리스트 끝까지, 한 단계마다 2씩 건너뛰며 요소를 가져옵니다.슬라이싱 문법은 [1:
문제 개요높이 값들이 담긴 리스트가 주어졌을 때, 그 안에는 중복된 항목도 포함되어 있을 수 있습니다. 이때 우리가 구해야 할 것은 중복을 제거한 고유한 항목들만의 평균입니다.예를 들어 입력이 heights = [96,25,83,96,33,83,24,25]라고 해보겠습니다. 고유한 요소는 [96, 25, 83, 33, 24]이고, 이들의 합은 96 + 25 + 83 + 33 + 24 = 261입니다. 따라서 평균은 261 ÷ 5 = 52.2가 됩니다.해결 접근 방법이 문제는 다음 두 단계만으로 간단하게 해결할 수 있습니다.h_set
문제 설명하나의 숫자 n이 주어졌을 때, 아래 조건에 따라 n의 약수 중에서 더 나은(better) 약수를 찾아야 합니다.두 수 p와 q를 비교할 때, 각 자릿수의 합이 더 큰 수가 더 나은 수로 간주됩니다. 만약 자릿수의 합이 서로 같다면, 실제 값이 더 작은 수가 더 나은 수가 됩니다.예를 들어 입력이 n = 180이라면 출력은 9가 됩니다. 180의 약수는 [1, 2, 3, 4, 5, 6, 9, 10, 12, 15, 18, 20, 30, 36, 45, 60, 90, 180]이며, 이 중 자릿수의 합이 최대인 수들은 [9, 18
문제 개요 하나의 숫자 n이 주어졌을 때, 1부터 n까지의 요소를 포함하는 크기 n짜리 리스트를 생성해야 합니다. 예를 들어 입력값이 n = 5라면, 출력 결과는 다음과 같습니다. [1, 2, 3, 4, 5] 해결 방법 이 문제는 파이썬의 강력한 문법을 활용하면 매우 간단하게 해결할 수 있습니다. 리스트 컴프리헨션(list comprehension) 기법을 사용하면 반복문 없이도 한 줄의 코드로 리스트를 생성할 수 있습니다. range() 함수를 활용하여 1부터 n까지의 값을 차례대로 가져와 리스트에 담습니다. 이때 하한값은 1
파이썬에서 리스트를 뒤집는 가장 간결하고 우아한 방법 중 하나는 바로 슬라이싱(slicing)을 활용하는 것입니다. 이번 글에서는 n개의 요소를 가진 리스트 nums가 주어졌을 때, 슬라이싱 연산만으로 리스트를 역순으로 뒤집는 방법을 알아보겠습니다.문제 정의예를 들어 입력 리스트가 다음과 같다고 가정해 보겠습니다.nums = [5, 7, 6, 4, 6, 9, 3, 6, 2]이때 기대하는 출력 결과는 다음과 같습니다.[2, 6, 3, 9, 6, 4, 6, 7, 5]해결 접근 방식리스트 슬라이싱은 콜론(:)으로 구분되는 최대 세 개의
nums라고 하는 n개의 요소를 가진 리스트가 있다고 가정해 보겠습니다. 우리가 해야 할 일은 이 리스트에서 모든 홀수 요소의 합을 구하는 것입니다.예를 들어, 입력이 다음과 같다면:nums = [5,7,6,4,6,9,3,6,2]출력은 24가 됩니다. 그 이유는 홀수인 요소들이 5, 7, 9, 3이며, 5+7+9+3 = 24이기 때문입니다.문제 해결 접근 방식이 문제는 파이썬의 리스트 컴프리헨션(list comprehension)을 활용하면 매우 간결하게 해결할 수 있습니다. 해결 과정은 다음과 같습니다.리스트 컴프리헨션을 사용하여
리스트 nums가 있다고 가정해 보겠습니다. 이때 len(), size(), length()와 같은 내장 길이 관련 함수를 전혀 사용하지 않고 이 리스트의 길이(요소 개수)를 구해야 합니다.예를 들어 입력이 다음과 같다면,nums = [5, 7, 6, 4, 6, 9, 3, 6, 2]출력은 요소가 총 9개이므로 9가 되어야 합니다.해결 접근 방식이 문제는 map()과 리스트 연산을 조합하면 간단하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.리스트의 각 요소를 값 그대로 두지 않고 1로 변환합니다.변환된 결과를 모두 더하면
양수와 음수가 섞여 있는 숫자 리스트 nums가 있다고 가정해 봅시다. 이 리스트를 업데이트하여 최종 결과가 각 요소의 절댓값만 담도록 만들어야 합니다.예를 들어, 입력이 nums = [5,-7,-6,4,6,-9,3,-6,-2]라면 출력은 [5, 7, 6, 4, 6, 9, 3, 6, 2]가 됩니다. 즉, 모든 음수 부호가 제거된 값들이 반환됩니다.문제 해결 접근 방식이 문제는 Python의 map() 함수와 람다(lambda) 표현식을 활용하면 매우 간결하게 해결할 수 있습니다. 단계별로 살펴보면 다음과 같습니다.x를 인자로 받아
문제 개요 두 명의 플레이어 아말(Amal)과 비말(Bimal)이 게임을 하고 있습니다. 게임 규칙은 다음과 같습니다. 두 플레이어는 동일한 문자열 s를 가지고 시작합니다. 각자 문자열 s의 글자들을 사용해 부분 문자열(substring)을 만들어야 합니다. 비말은 반드시 자음으로 시작하는 단어를 만들어야 합니다. 아말은 반드시 모음으로 시작하는 단어를 만들어야 합니다. 게임은 두 플레이어가 만들 수 있는 모든 부분 문자열을 완성하면 종료됩니다. 점수 계산 방식은 다음과 같습니다. 플레이어가 만든 부분 문자열이 원래 문자열 s
문자열 s와 값 k가 주어져 있다고 가정해 보겠습니다. 여기서 k는 문자열 길이 n의 약수입니다. 이 경우 문자열 s를 크기가 k인 n/k개의 부분 문자열 t_i로 나눌 수 있습니다.그런 다음 각 t_i를 이용하여 다음 조건을 만족하는 새로운 문자열 u_i를 만들어야 합니다.u_i에 포함된 문자들은 반드시 t_i에 존재하는 문자들이어야 합니다.중복된 문자는 제거되어, u_i 내에서 각 문자의 빈도는 정확히 1이 되어야 합니다.즉, 우리가 찾아야 하는 것은 이러한 u_i 문자열들의 목록입니다.문제 이해하기예를 들어 입력이 s = MM
두 개의 시간이 Day dd Mon yyyy hh:mm:ss +/-xxxx 형식으로 주어졌다고 가정해 보겠습니다. 여기서 Day는 첫 글자가 대문자인 세 자리 요일 이름이고, Mon은 세 자리 월 이름입니다. 마지막의 + 또는 - xxxx는 시간대를 나타내며, 예를 들어 +0530은 GMT보다 5시간 30분 앞선 시간임을 의미합니다(나머지 dd, hh, mm, ss 등의 형식은 표기만 봐도 쉽게 이해할 수 있습니다). 이때 두 타임스탬프 사이의 절대 차이를 초 단위로 구하는 것이 목표입니다. 파이썬에서는 datetime 라이브러리
직각삼각형의 두 변 AB와 BC가 주어져 있다고 가정해 보겠습니다. 빗변(AC)의 중점을 M이라 할 때, 우리가 구하고자 하는 것은 M과 밑변 BC 사이의 각도입니다.예를 들어 ab = 6, bc = 4가 입력으로 주어진다면 결과는 56.309932474020215가 됩니다. 그 이유는 ab/bc의 아크탄젠트(arctan) 값이 약 0.9828 라디안인데, 이를 도(degree) 단위로 변환하면 약 56.31도가 되기 때문입니다.풀이 접근 방법이 문제는 삼각함수의 기본 성질만 활용하면 매우 간단하게 해결할 수 있습니다.ans :=
어떤 수 x가 주어졌을 때, math.exp() 같은 라이브러리 함수를 사용하지 않고 ex(지수 함수)의 값을 효율적으로 계산해야 하는 문제입니다.ex는 다음과 같은 테일러 급수(Taylor Series)로 표현할 수 있습니다.ex = 1 + x + x2/2! + x3/3! + ...예를 들어 입력이 x = 5라면 출력은 148.4131이 됩니다. 실제로 e5 = 1 + 5 + 52/2! + 53/3! + ... = 148.4131... 이기 때문입니다.해결 접근 방식이 문제는 테일러 급수의 각 항을 순서대로 더하는 방식으로 해결할
문제 설명 서로 다른 n개의 정수로 이루어진 배열 nums와, 공통 원소가 없는 두 개의 집합 A와 B가 주어졌다고 가정해 봅시다. 행복도(happiness) 변수는 처음에 0으로 초기화되며, 배열 nums의 각 정수 i를 하나씩 살펴봅니다. 만약 i가 집합 A에 속한다면 행복도를 1만큼 증가시키고, i가 집합 B에 속한다면 행복도를 1만큼 감소시킵니다. 모든 원소를 확인한 후 최종 행복도 값을 구하는 것이 목표입니다. 예를 들어 입력이 nums = [1,2,5,8,6,3], A = {5,8,9,7,3}, B = {2,4,12,1
데이터 목록 x(정의역)와 크기가 같은 데이터 목록 y(치역)가 주어졌을 때, x → y가 함수인지 아닌지를 판별해야 합니다. 여기서는 x와 y의 모든 원소가 양수라고 가정합니다.예를 들어 입력이 x = [1, 3, 2, 6, 5], y = [1, 9, 4, 36, 25]라면 출력은 True입니다. 각 x에 대응하는 y 값이 항상 그 제곱값이므로, 하나의 x에 하나의 y만 대응되는 함수 관계이기 때문입니다.접근 방법이 문제는 해시 맵(딕셔너리)을 활용하면 간단하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.새로운 빈 딕셔
2차원 평면 위에 단순 다각형(simple polygon)의 꼭짓점들이 순서대로 나열된 좌표 리스트가 주어졌을 때, 이 다각형의 둘레(perimeter)를 계산하는 문제를 파이썬으로 해결해 보겠습니다.문제 이해하기예를 들어, 입력이 다음과 같다고 가정해 보겠습니다.points = [(0, 0), (0, 5), (3, 5), (3, 0)]이 네 개의 점은 가로 3, 세로 5인 직사각형을 이룹니다. 따라서 두 변의 길이는 각각 3이고, 나머지 두 변의 길이는 각각 5입니다.둘레 = 2 × 5 + 2 × 3 = 16해결 접근 방법다각형의
문제 소개단어 목록이 주어졌을 때, 같은 단어가 여러 번 반복해서 나타날 수 있습니다. 이때 각 단어가 몇 번 등장했는지 그 빈도(frequency)를 구하고, 동시에 서로 다른 고유 단어(distinct words)가 총 몇 개인지 세는 프로그램을 만들어 보겠습니다.예를 들어 입력이 다음과 같다고 가정해 봅시다.words = [Book, Sound, Language, Computer, Book, Language]이 경우 출력은 (4, 2 1 2 1)이 됩니다. 고유 단어는 총 4개이고, 첫 번째 단어(Book)와 세 번째 단어(L
숫자로만 이루어진 문자열 s가 주어졌다고 가정해 봅시다. 문자열 안에는 같은 숫자가 여러 번 반복해서 나타날 수 있습니다. 우리가 구해야 할 것은 각 숫자가 연속적으로 몇 번 나타났는지를 나타내는 (숫자, 개수) 형태의 쌍 목록입니다.이 문제는 Python의 itertools 라이브러리에 포함된 groupby() 함수를 사용하면 아주 깔끔하게 해결할 수 있습니다. groupby()는 인접한 동일한 요소들을 하나의 그룹으로 묶어주는 이터레이터를 반환하며, 각 항목은 (키 값, 그룹 객체) 형태의 튜플로 구성됩니다. 따라서 각 그룹 객
문제 개요 2차원 평면 위에서 단순 다각형(simple polygon)의 꼭짓점들을 순서대로 나열한 좌표 목록이 주어졌다고 가정해 봅시다. 우리의 목표는 이 다각형의 넓이를 계산하는 것입니다. 예를 들어, 입력이 points = [(0, 0), (0, 5), (3, 5), (3, 0)]과 같다면, 해당 다각형은 가로 3, 세로 5인 직사각형이므로 결과는 15가 됩니다. 해결 접근 방법: 신발끈 공식(Shoelace Formula) 이 문제는 신발끈 공식(Shoelace Formula), 즉 사선 공식을 활용하면 효율적으로 해결할 수