본문 바로가기

Computer Science27

자료형 한눈에 보기: 비트, 바이트와 정수, 실수, 문자, 논리형 컴퓨터는 데이터를 저장하고 처리하기 위해 자료형(Data Type)을 사용합니다.특히, 정수(Integer)와 실수(Floating Point)는 저장 방식과 연산에서 큰 차이가 있습니다.정수는 이진법으로 정확히 저장할 수 있지만, 실수는 근사값으로 저장합니다.이는 컴퓨터가 실수를 저장할 때 부동소수점(Floating Point) 방식을 사용하기 때문이며, 이로 인해 저장 오차가 발생합니다.또한, 문자(Char)는 직접적으로 문자를 저장하지 않고, 문자에 해당하는 정수값(유니코드)를 저장합니다.이번 글에서는 비트와 바이트의 기본 개념, 정수형과 실수형, 문자형 자료형의 특징, 그리고 Float과 Double의 차이를 중심으로 정리하겠습니다.1. 비트(Bit)와 바이트(Byte)의 기본 개념비트(Bit)란.. 2025. 1. 23.
[Algorithm/Kotlin] 에라토스테네스의 체(Sieve of Eratosthenes) 쉽게 이해하기 에라토스테네스의 체는 특정 범위에서 소수를 빠르고 효율적으로 구하는 방법입니다.작은 소수의 배수를 제거함으로써 소수만 남기는 아이디어를 기반으로 합니다.이 글에서는 코드와 함께 이해한 내용을 정리 해 두도록 하겠습니다.에라토스테네스의 체의 핵심 동작1. i의 범위 제한: i in 2..Math.sqrt(limit.toDouble()).toInt()이 범위는 왜 필요한가?소수의 배수 제거는 대칭적으로 이루어집니다.예: 16의 약수는 (2,8),(4,4)처럼 대칭적으로 나타납니다.따라서 sqrt(limit)​까지만 확인하면 충분합니다.sqrt(16) = 4이므로 i=2,3,4까지만 반복하면 됩니다.코드 예제val limit = 16for (i in 2..Math.sqrt(limit.toDouble()).to.. 2025. 1. 20.
[DataStructure/Kotlin] pop과 peak의 차이점: 스택의 두 가지 주요 기능 스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하는 자료 구조입니다. 스택에서 자주 사용되는 두 가지 주요 연산은 pop과 peak입니다. 이 두 연산은 비슷하게 보이지만, 의미와 사용 목적에서 분명한 차이가 있습니다.이를 이해하기 쉽게 정리 해 보겠습니다. 1. pop과 peak의 정의pop:스택의 가장 위에 있는 요소를 제거하면서 반환합니다.스택의 상태를 변경하며, 크기가 줄어듭니다.peak:스택의 가장 위에 있는 요소를 그대로 반환합니다.스택의 상태를 변경하지 않습니다. 단순히 데이터를 확인하는 용도로 사용됩니다. 2. 코틀린 구현 예제val stack = mutableListOf()fun push(data: Int) { stack.add(dat.. 2025. 1. 17.
[DataStructure/Kotlin] 스택 구현: MutableList vs Array의 차이점과 구현 방법 스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하는 자료 구조입니다.코틀린에서 스택을 구현할 때 주로 사용하는 두 가지 주요 데이터 구조는 MutableList와 Array입니다.이번 글에서는 두 가지 방법으로 스택을 구현하는 코드와 함께, 각 방식의 차이점과 특징을 비교해보겠습니다.1. MutableList를 사용한 스택 구현MutableList는 코틀린의 동적 리스트로, 크기를 필요에 따라 자동으로 확장하거나 축소할 수 있습니다.이를 사용하면 스택을 간단하고 유연하게 구현할 수 있습니다.코드 예제:val stack = mutableListOf()fun push(data: Int) { stack.add(data) // 스택의 끝에 데이터 추가}fun.. 2025. 1. 17.
[Algorithm/Kotlin] 백준 10816번 숫자 카드 2: 시간 복잡도를 계산해 시간초과 해결하기 이 문제를 풀때, 처음에는 단순히 이중 반복문을 떠올려 문제를 해결했지만 입력 크기를 고려하지 못해 시간 초과 실패를 경험했습니다. 이 경험을 토대로, 단순히 문제를 푸는 것에 그치지 않고 시간 복잡도를 계산하고 효율적인 알고리즘을 설계하는 것이 얼마나 중요한지를 배웠습니다.이후 시간 복잡도를 다시 계산하고, 효율적인 방법(groupingBy)을 도입해 문제를 해결할 수 있었습니다.각각의 문제 풀이법과 시간 복잡도 계산 내용을 정리해 두고자 합니다.문제 설명숫자 카드는 정수 하나가 적혀 있는 카드입니다. 상근이는 숫자 카드 N개를 가지고 있으며, 정수 M개가 주어졌을 때, 이 수가 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성해야 합니다.입력 조건첫째 줄: 상근이가 가지고 있는 숫자 카드의 개수 .. 2025. 1. 16.
[Algorithm/Kotlin] 백준 2164번 카드2: Queue를 활용한 풀이법 문제 설명 N장의 카드가 있습니다. 카드는 1부터 N까지 번호가 붙어 있고, 1번 카드가 제일 위, N번 카드가 제일 아래에 놓여 있습니다. 이 상태에서 다음 동작을 반복하여 카드가 한 장만 남을 때까지 진행합니다:제일 위에 있는 카드를 버린다.그 다음, 제일 위에 있는 카드를 제일 아래로 옮긴다.마지막에 남는 카드를 구하는 프로그램을 작성합니다.문제 해결 아이디어이 문제는 큐(Queue) 자료구조를 사용하면 직관적으로 해결할 수 있습니다. 문제에서 요구하는 동작이 큐의 FIFO(First In First Out) 구조와 일치하기 때문입니다.큐 초기화:   1부터 N까지의 숫자를 큐에 삽입합니다.   예: N=6이면 [1,2,3,4,5,6].홀수와 짝수 턴 처리:   홀수번째 턴:   poll() 메서드.. 2025. 1. 6.
[Algorithm/Kotlin] 백준 2839번 설탕 배달 문제 설명설탕 배달 문제는 다음과 같습니다.상근이는 설탕 공장에서 3kg 봉지와 5kg 봉지를 사용해 정확히 Nkg의 설탕을 배달하려고 합니다. 이때 봉지의 개수가 최소가 되도록 설탕을 나눌 방법을 찾는 문제입니다.만약 정확히 나눌 수 없다면 -1을 반환해야 합니다.문제 해결 아이디어이 문제의 핵심은 5kg 봉지를 최대한 먼저 사용하고, 나머지를 3kg 봉지로 채우는 방법입니다. 이유는 5kg 봉지를 최대한 사용했을 때 봉지 개수가 더 줄어들 가능성이 높기 때문입니다.로직 설계기저 조건:   N인 경우 설탕을 정확히 나눌 수 없으므로 -1을 반환합니다.5kg 봉지를 최대한 사용:   N을 5로 나눈 몫만큼 5kg 봉지를 사용합니다.   남은 설탕 무게를 계산합니다.남은 설탕 처리:   남은 설탕이 3으로.. 2025. 1. 6.
[Algorithm/Kotlin] 백준 7568번 덩치: StringBuilder를 활용한 풀이법 덩치 등수 매기기 문제는 주어진 사람들의 키와 몸무게를 비교하여 각자의 상대적인 순위를 구하는 알고리즘 문제입니다. 이번 글에서는 문제를 두 가지 방식으로 해결하며, 효율성을 개선하기 위해 StringBuilder를 활용한 방식을 소개합니다. 문제 설명덩치 비교 기준사람의 덩치는 키와 몸무게 두 가지 값으로 표현됩니다. 예를 들어 (x, y)는 한 사람의 몸무게 x와 키 y를 나타냅니다. 두 사람 A와 B의 덩치 (x, y)와 (p, q)를 비교할 때:A의 덩치가 더 크다면: x > p 그리고 y > q를 만족해야 합니다.두 값 중 하나라도 크거나 같지 않으면 A와 B의 덩치는 비교할 수 없습니다.등수 계산주어진 N명의 사람들에 대해:자신보다 덩치가 더 큰 사람의 수를 구합니다.등수는 이 수에 1을 더한.. 2025. 1. 2.
[Algorithm/Kotlin] 백준 2562번 최댓값: withIndex 문법을 활용한 풀이법 이번 글에서는, 리스트의 최댓값을 구하고, 그 최댓값이 위치한 인덱스를 함께 찾는 두 가지 방식에 대해 정리 해 보겠습니다.특히, 최댓값 문제를 풀면서 알게되어 두 번째 방식에서 사용한 withIndex 문법에 대해 중점적으로 살펴보겠습니다.문제 정의9개의 정수를 입력받아 리스트에 저장한 뒤, 다음 두 가지를 출력하는 프로그램을 작성합니다:리스트의 최댓값최댓값이 위치한 인덱스(1부터 시작)풀이 방법 1: 간단한 라이브러리 함수 활용먼저, 코틀린의 내장 함수를 활용한 간단한 풀이 방법입니다.fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStream.. 2024. 12. 10.
반응형