문자열이 주어졌을 때, 그 문자열의 양쪽 절반이 서로 동일한 문자 집합을 가지고 있는지 확인하는 것이 이번 포스팅의 목표입니다. 문제를 해결하는 기본 아이디어는 간단합니다. 먼저 문자열을 중간을 기준으로 둘로 나눈 뒤, 각 절반에 포함된 문자들의 종류와 빈도가 일치하는지 비교하면 됩니다.만약 문자열의 길이가 홀수라면 정확히 반으로 나눌 수 없으므로, 가운데 문자 하나는 무시하고 나머지 좌우 부분만 비교합니다.알고리즘전체 로직은 다음 단계로 구성됩니다.입력 받기: 대상 문자열을 입력받습니다.문자열 분할: 문자열 길이에 따라 두 부분으
이 글에서는 파이썬(Python)을 사용하여 주어진 두 리스트에서 서로 공통으로 포함된 요소를 찾아 출력하는 방법을 알아봅니다. 예제 입력 : L1 = [5, 6, 7, 8, 9] L2 = [5, 13, 34, 22, 90] 출력 : {5} 설명 두 리스트에 모두 존재하는 공통 요소는 5입니다. 알고리즘 1단계 : 사용자 입력으로 두 개의 리스트를 생성합니다. 2단계 : 각 리스트를 집합(set)으로 변환한 뒤, set1 & set2 결과를 출력합니다. 3단계 : set1 & set2 연산은 두 집합의 교집합
두 개의 문자열이 주어졌을 때, 먼저 첫 번째 문자열에서 두 문자열에 공통으로 나타나는 문자를 모두 제거하고, 남은 고유한(uncommon) 문자들끼리 이어 붙여 하나의 새로운 문자열을 만드는 문제입니다. 예제 입력 >> 첫 번째 문자열:: AABCD 두 번째 문자열:: MNAABP 출력 >> CDMNP 위 예제에서 A와 B는 두 문자열에 모두 존재하므로 제거되고, 첫 번째 문자열의 고유 문자 C, D와 두 번째 문자열의 고유 문자 M, N, P가 순서대로 연결되어 최종 결과가 만들어집니다. 알고리즘 Un
주어진 리스트가 있을 때, 그 리스트로 만들 수 있는 모든 부분 리스트(서브리스트)를 출력하는 프로그램을 작성해 보겠습니다. 이 문제는 파이썬의 슬라이싱(slicing) 기능과 중첩 반복문을 활용하면 아주 간단하게 해결할 수 있습니다. 예시 입력 : list = [1, 2, 3] 출력 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] [1, 2, 3]이라는 리스트는 빈 리스트를 포함해 총 7개의 서브리스트를 가질 수 있습니다. 일반적으로 길이가 n인 리스트는 빈 리스트를 포함하여 n(n+1)
프로그래밍을 배울 때 가장 먼저 접하게 되는 조건문 연습 중 하나가 바로 입력받은 숫자가 양수인지 음수인지, 그리고 홀수인지 짝수인지 판별하는 문제입니다. 이 글에서는 파이썬(Python)을 사용해 하나의 숫자에 대해 양수·음수·0 여부와 홀수·짝수 여부를 한 번에 확인하는 방법을 알아보겠습니다.알고리즘1단계: 숫자를 입력받습니다.2단계: 숫자가 0보다 큰지 확인합니다. 참이면 양수, 거짓이면 음수이며, 값이 정확히 0이라면 0으로 판별합니다.3단계: 숫자를 2로 나누었을 때 나머지가 0이면 짝수, 그렇지 않으면 홀수입니다.예제 코
하나의 문자열이 주어졌을 때, 그 안에서 첫 번째로 반복되는 단어를 찾는 것이 이번 글의 목표입니다. 이 문제는 Python의 Collections 모듈을 활용하면 아주 간단하게 해결할 수 있습니다. Collections 모듈에서 제공하는 Counter() 메서드를 사용하면 각 단어가 몇 번 등장했는지 손쉽게 계산할 수 있습니다. 알고리즘 전체적인 접근 방식은 다음 세 단계로 구성됩니다. 1단계: 주어진 문자열을 공백을 기준으로 분할하여 단어 목록을 만듭니다. 2단계: 단어 목록을 Counter()를 통해 딕셔너리 형태(단어 →
양수 하나와 비트 범위가 주어졌을 때, 해당 범위 안에 있는 설정되지 않은 비트(unset bit), 즉 값이 0인 비트의 개수를 구하는 문제입니다.입력 : n = 50, 시작 위치 = 2, 끝 위치 = 5 출력 : 2비트 위치 2부터 5 사이에는 0인 비트가 총 2개 존재합니다.알고리즘문제를 해결하는 절차는 다음과 같습니다.1단계 : bin() 함수를 사용해 n을 이진수 문자열로 변환한다. 2단계 : 앞의 두 문자(0b)를 제거한다. 3단계 : 문자열을 뒤집는다. 4단계 : 인덱스 l-1부터 r까지(r은 미포함) 범위에서 0인 비
합집합(Union) 연산은 두 개의 리스트에 담긴 모든 요소를 가져와 하나의 새로운 리스트에 저장하는 작업을 의미합니다.List1 :: [1, 2, 3] List2 :: [4, 5, 6] List3 :: [1, 2, 3, 4, 5, 6]알고리즘Step 1: 두 개의 리스트를 입력받습니다. Step 2: 합집합 연산을 위해 + 연산자를 사용해 두 리스트를 연결합니다.예제 코드# UNION OPERATION A = list() B = list() n = int(input(Enter the size of the List :: )) pri
교집합(Intersection) 연산이란, 두 개의 리스트에서 공통으로 포함된 원소만 추출하여 새로운 세 번째 리스트에 저장하는 작업을 의미합니다.List1 :: [1, 2, 3] List2 :: [2, 3, 6] List3 :: [2, 3]위 예시에서 List1과 List2 양쪽에 모두 존재하는 값은 2와 3이므로, List3에는 [2, 3]이 저장됩니다.알고리즘1단계: 두 개의 리스트를 입력받습니다. 2단계: 첫 번째 리스트의 모든 원소를 순회하며 두 번째 리스트의 원소와 비교합니다. 3단계: 일치하는 원소가 발견되면 세 번째
이 글에서는 사용자로부터 입력받은 리스트의 요소들을 문자열 길이를 기준으로 정렬하는 파이썬 프로그램을 소개합니다. 여기서는 파이썬의 내장 함수인 sorted()를 활용하며, 핵심은 key=len 매개변수입니다. 예시 입력 :: [mona, pp, aaa] 각 요소의 길이는 [4, 2, 3] 길이 기준 정렬 순서는 [2, 3, 4] 출력 :: [pp, aaa, mona] 알고리즘 정렬 과정은 아주 간단합니다. 리스트의 요소를 입력받습니다. sorted(A, key=len) 함수를 적용해 길이순으로 정렬합니다. 예제 코드
개요문자열(시퀀스)이 주어졌을 때, 우리의 과제는 두 번째로 많이 반복되는 단어를 찾는 것입니다. 이 문제는 파이썬의 Counter(iterator)를 활용하면 간단하게 해결할 수 있습니다. Counter는 단어를 키(key)로, 해당 단어의 빈도수를 값(value)으로 갖는 딕셔너리를 자동으로 생성해 줍니다.알고리즘사용자 정의 리스트를 생성합니다.리스트를 딕셔너리로 변환합니다.딕셔너리의 값들을 가져와 내림차순으로 정렬합니다.정렬된 결과에서 두 번째 요소가 곧 두 번째로 큰 값입니다.전체 딕셔너리를 다시 순회하면서, 값이 두 번째로
이 글에서는 파이썬의 map() 내장 함수 안에 람다(lambda) 함수, 즉 익명 함수를 활용하여 특정 숫자의 거듭제곱 값을 차례대로 출력하는 방법을 소개합니다. 익명 함수(lambda)란? 파이썬에서 익명 함수는 이름 없이 정의되는 함수로, def 대신 lambda 키워드를 사용해 한 줄로 간단하게 작성할 수 있습니다. 주로 짧고 단순한 연산이 필요할 때 유용하며, 이번 예제처럼 map() 함수와 함께 사용하면 시퀀스의 각 요소에 동일한 연산을 손쉽게 적용할 수 있습니다. 알고리즘 1단계: 출력할 항의 개수 n을 입력받는다.
파이썬은 여러 개의 숫자 요소를 손쉽게 더할 수 있도록 sum() 함수를 기본적으로 제공합니다. 이 함수를 활용하면 리스트에 담긴 모든 요소의 합계를 구한 뒤, 요소 개수로 나누어 간단하게 평균값을 계산할 수 있습니다.알고리즘1단계: 리스트의 크기(size)를 입력받는다. 2단계: 리스트에 들어갈 숫자(요소)를 입력받는다. 3단계: sum() 함수를 사용해 모든 숫자의 합계를 계산한다. 4단계: 합계를 개수로 나누어 평균을 구한다.예제 코드# 리스트의 평균 구하기 A = list() n = int(input(리스트의 크기를 입력하세
리스트(배열)가 주어졌을 때, 그 안에서 최댓값, 최솟값, 두 번째로 큰 값, 두 번째로 작은 값을 모두 찾아야 하는 경우가 자주 있습니다. 파이썬에서는 정렬을 활용할 수도 있지만, 리스트를 단 한 번만 순회하면서 네 가지 값을 동시에 구하는 방식이 훨씬 효율적입니다. 알고리즘 1단계: 리스트 요소를 입력받습니다. 2단계: 각 숫자를 리스트의 다른 숫자들과 비교합니다. 3단계: 최댓값, 최솟값, 두 번째로 큰 값, 두 번째로 작은 값을 구합니다. 동작 원리 네 개의 변수(maxi, secondmax, mini, secondmin
중복 요소가 포함된 하나의 리스트가 주어졌을 때, 중복을 제거한 요소들만 담고 있는 새로운 리스트를 만드는 것이 이번 글의 목표입니다. 파이썬에서는 간단한 반복문과 조건문만으로도 손쉽게 구현할 수 있으며, 내장 함수를 활용하면 더욱 짧은 코드로 처리할 수도 있습니다. 예시 입력 :: [2, 3, 4, 3, 4, 6, 78, 90] 출력 :: [2, 3, 4, 6, 78, 90] 알고리즘 1단계: 원본 리스트를 생성합니다. 2단계: 비어 있는 새로운 리스트를 생성합니다. 3단계: 원본 리스트의 모든 요소를 순회(traverse)
문제 소개사용자가 입력한 두 개의 리스트가 주어지며, 각 리스트의 요소들은 정렬되어 있지 않습니다. 이번 글에서는 이렇게 정렬되지 않은 두 배열을 하나로 병합한 후, 전체를 오름차순으로 정렬된 리스트로 만드는 Python 프로그램을 살펴보겠습니다.예제입력: A[] = {100, 50, 150} B[] = {200, 30, 20} 출력: 병합 리스트: {20, 30, 50, 100, 150, 200}알고리즘전체 절차는 다음과 같습니다.먼저 두 개의 사용자 입력 리스트를 생성합니다.최종 병합 리스트의 크기는 첫 번째 리스트
CRC(Cyclic Redundancy Check, 순환 중복 검사)는 디지털 데이터의 오류를 감지하는 대표적인 기술로, 데이터 전송 과정에서 발생하는 오류를 효과적으로 탐지할 수 있습니다. 이 기술의 핵심 원리는 이진 나눗셈(binary division)에 있습니다. 이 기법에서는 순환 중복 검사 비트(CRC 비트), 즉 일련의 중복 비트(redundant bits)가 사용됩니다. 이 비트들은 데이터 단위(data unit)의 끝에 덧붙여져, 최종적으로 생성된 데이터 단위가 사전에 약속된 특정 이진수로 정확하게 나누어 떨어지도록
사용자가 입력한 두 개의 문자열이 주어졌을 때, 두 문자열에 공통으로 포함된 문자들을 알파벳 순서로 정렬하여 출력하는 것이 이번 튜토리얼의 목표입니다.예제입력: string1: python string2: program 출력: op설명두 문자열 사이에서 공통으로 나타나는 문자는 o(1회)와 p(1회)입니다. 따라서 최종 결과는 알파벳 순서대로 정렬된 op가 됩니다.알고리즘Step 1: 사용자로부터 두 개의 문자열을 입력받습니다. Step 2: 두 문자열을 각각 Counter 딕셔너리로 변환합니다. Step 3: intersectio
단어와 공백이 섞여 있는 문자열이 주어졌을 때, 문자열 전체를 단 한 번만 순회하면서 모든 공백을 문자열의 맨 앞으로 이동시키는 것이 이번 글의 목표입니다. 이 문제는 파이썬(Python)의 리스트 컴프리헨션(List Comprehension)을 활용하면 아주 간단하고 효율적으로 해결할 수 있습니다.예제입력: string = python program 출력: string = pythonprogram알고리즘1단계: 단어와 공백이 포함된 문자열을 입력받습니다. 2단계: 입력 문자열을 순회하며 리스트 컴프리헨션으로 공백이 없는 문자열을
문자열이 하나 주어졌을 때, 이를 두 가지 방향으로 회전시키는 것이 목표입니다. 하나는 시계 방향(오른쪽 회전), 다른 하나는 반시계 방향(왼쪽 회전)입니다.1. 주어진 문자열을 d개의 요소만큼 왼쪽(반시계 방향)으로 회전합니다. (단, d <= n)2. 주어진 문자열을 d개의 요소만큼 오른쪽(시계 방향)으로 회전합니다. (단, d <= n)예제입력: string = pythonprogram d = 2 출력: 왼쪽 회전: thonprogrampy 오른쪽 회전: ampythonprogr알고리즘1단계: 문자열을 입력받습니다.