티스토리

공부
검색하기

블로그 홈

공부

codingstudy95.tistory.com/m

김검정 님의 블로그입니다.

구독자
1
방명록 방문하기

주요 글 목록

  • Kotlin 연습하기(13) - 분할 정복 알고리즘 분할 정복 알고리즘의 기본 개념분할 정복의 핵심 아이디어는 분할 정복 이름 그대로 '분할(Divide)', '정복(Conquer)', '결합(Combine)' 의 세 단계로 이루어져 있다.분할 : 큰 문제를 여러 개의 작은 문제로 나눈다.정복 : 나눈 작은 문제들을 각각 해결한다.결합 : 해결한 결과를 합쳐서 전체 문제의 답을 만든다.쉽게 설명하면 큰 케이크를 한 번에 먹으려 하면 힘들지만, 조각조각 나눠서 먹으면 쉬운것과 비슷하다.  분할 정복의 대표 알고리즘으로는 병합 정렬과 퀵 정렬이 있다.  1. 병합 정렬(Merge Sort)병합 정렬은 배열을 반으로 나누고, 각각을 정렬한 뒤, 두 정렬된 배열을 합쳐서 전체 배열을 정렬하는 방법이다. 멀쩡히 있는 배열을 왜 쪼갤까? 배열을 작게 나누면, 작은 .. 공감수 0 댓글수 0 2025. 4. 30.
  • Kotlin 연습하기(12) - 해시 테이블 데이터를 빠르게 검색하거나 저장하는 일은 개발에서 필수적이다. (항상 이걸 어떻게 하면 잘할까 고민한다..) 이러한 작업을 가장 효율적으로 수행하는 자료구조 중 하나가 바로 해시 테이블(Hash Table) 이다. 해시 테이블은 키-값(Key-Value) 쌍으로 데이터를 저장하며, 거의 상수 시간(평균 O(1))에 데이터에 접근할 수 있는 강력한 도구이다.  해시 테이블이란?해시 테이블은 위에서 언급한것과 같이 키(key)와 값(value)의 쌍으로 데이터를 저장하는 구조이다. 여기서 중요한 개념은 해시 함수(hash function)로, 입력된 키를 고정된 크기의 인덱스로 변환한다. 이 인덱스는 데이터를 저장할 배열의 위치를 결정한다. 예를 들어 "apple"이라는 키를 입력하면, 해시 함수는 "app.. 공감수 0 댓글수 0 2025. 4. 25.
  • Kotlin 연습하기(11) - 투 포인터와 슬라이딩 윈도우 알고리즘 투 포인터란 무엇일까?투 포인터 기법은 배열이나 리스트 등에서 두 개의 인덱스(포인터)를 사용하여 문제를 해결하는 알고리즘이다. 주로 정렬된 배열에서 조건에 맞는 쌍을 찾거나, 두 포인터를 이용해 특정 구간을 탐색할 때 유용하다.  슬라이딩 윈도우란 또 무엇일까?슬라이딩 윈도우는 연속된 구간(윈도우)을 다루는 기법으로, 한 번에 한 구간씩 보면서 원하는 조건(예: 합, 평균, 최대/최소값 등)을 만족하는 최적의 결과를 찾는 방법이다.이때 "윈도우"는 배열이나 문자열에서 연속된 부분을 의미하며, 이 윈도우를 한칸씩 옮겨가며 문제를 해결한다.  이해가 잘 안된다 실생활 비유? or 더 쉬운 비유로 한번 이해를 해보자. 투 포인터 비유 : 책의 양쪽 끝에서 찾기생각해보자  한 권의 책에서 특정 단어를 찾으려고.. 공감수 0 댓글수 2 2025. 4. 23.
  • 프로그래머스 (기초) - 5명씩 https://school.programmers.co.kr/learn/courses/30/lessons/181886 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 프로그래머스 기초레벨의 5명씩 문제를 한번 풀어봤다. class Solution { fun solution(names: Array): Array { val result = mutableListOf() for (i in names.indices step 5) { result.add(names[i]) } return result.toTypedArray() }} 코드 .. 공감수 0 댓글수 0 2025. 4. 18.
  • Kotlin 연습하기(10) - 그리디 알고리즘 1. 그리디 알고리즘의 정의그리디 알고리즘은 문제를 해결할 때 현재 상황에서 가장 최선의 선택을 하여 최종 해답을 도출하는 방법이다. 이 때, 각 단계마다 선택하는 것이 최적해를 보장하는 경우에만 효과적이다.  2. 국부 최적 선택(Local Optimal Choice) 이란??국부 최적선택이란 각 단계에서 당장 가장 이득이 큰 선택을 하는 것을 의미한다. 예를 들어, 쇼핑할 때 할인율이 가장 높은 상품을 먼저 고르는 것과 비슷하다.  3. 그리디 알고리즘의 장단점장점 : 구현이 단순하고 빠르며, 계산 비용이 적다.문제의 크기가 커져도 각 단계의 선택만 고려하면 되므로 효율적이다.단점 : 매 순간 최선의 선택이 전체 최적해를 보장하지 않을 수 있다.문제에 따라 그리디 알고리즘이 최적해를 찾지 못하는 경우.. 공감수 1 댓글수 2 2025. 4. 14.
  • Kotiln 연습하기(9) - DFS / BFS 그래프(Graph)란 무엇일까?그래프는 정점(Vertex)와 간선(Edge)으로 구성된 자료구조이다. 정점(Vertex) : 그래프의 구성요소로, 사람이나 도시처럼 개별 요소를 나타낸다.간선(Edge) : 정점들을 연결하는 선이다. 두 정점 사이의 관계(예:도로, 친구 관계)를 나타낸다.예시 : 학교에서 여러 학생(정점)들이 친구 관계(관선)를 맺고 있는 것을 그래프로 생각할 수 있다. 그래프의 표현 방법그래프를 컴퓨터에서 표현하는 방법에는 여러 가지가 있다. 가장 일반적인 두 가지 방법은 인접 리스트와 인접 행렬이다.인접 리스트(Adjacency List) : 각 정점에 연결된 정접들의 리스트를 저장한다.       예시0: [1, 2]1: [0, 3]2: [0, 3]3: [1, 2] 인접 행렬(Adj.. 공감수 1 댓글수 1 2025. 4. 11.
  • Kotlin 연습하기(7) - 동적 계획(DP) 동적 계획법(Dynamic Programming, DP) - DPDP란 무엇일까? 동적 계획법은 큰 문제를 여러 개의 작은 문제로 나누어 해결한 후, 그 결과를 저장하여 전체 문제를 효율적으로 해결하는 방법이다. 예를 들어, 큰 퍼즐을 맞출 때, 각 조각을 따로 기억해둔다면 다시 같은 조각을 찾지 않아도 된다.  DP의 핵심 개념부분 문제(Overlapping Subproblems) : 큰 문제를 해결하는 과정에서 동일한 작은 문제가 여러 번 반복되는 경우가 있다.최적 부분 구조(Optimal Substructure) : 문제의 최적해가 그 하위 문제들의 최적해로 구성될 수 있을 때, DP를 적용할 수 있다.  대표 문제 : 계단 오르기 - 문제 설명 : 계단이 총 n개 있고, 한 번에 1계단 또는 2계.. 공감수 0 댓글수 0 2025. 4. 7.
  • Kotlin 연습하기(6) - 선형/이진 검색 검색 알고리즘이란 무엇일까?검색(Searching)은 배열이나 리스트 같은 데이터 집합에서 특정 값(또는 조건에 맞는 요소)을 찾아내는 과정이다.예를 들어, 반에서 학생들 이름이 적힌 명단이 있을 때 "철수"라는 이름을 찾는 것과 비슷하다. 왜 검색이 필요할까?데이터 찾기 : 많은 데이터 중에서 필요한 정보를 빠르게 찾기 위해 사용된다.알고리즘 문제 : 코딩 테스트에서 특정 값을 찾는 문제가 출제된다.효율성 : 올바른 검색 알고리즘을 사용하면 데이터의 양이 많더라도 빠른 시간 안에 원하는 값을 찾을 수 있다.  1. 선형 검색(Linear Search)배열의 첫 번째 요소부터 순서대로 하나씩 검사하면서 찾고자 하는 값과 일치하는지 확인한다. 특징 간단하고 구현하기 쉽다데이터가 정렬되어 있지 않아도 사용할.. 공감수 0 댓글수 0 2025. 4. 4.
  • Kotlin 연습하기(5) - 버블정렬 정렬이란 무엇일까?정렬(sorting)은 데이터 (예: 숫자, 문자열 등)를 일정한 순서대로 나열하는 과정이다. 예를 들어, 시험 점수가 섞여 있을 때 낮은 점수부터 높은 점수 순서대로 정렬하면, 누구의 점수가 가장 낮고 누구의 점수가 가장 높은지 쉽게 알 수 있다. 왜 정렬이 필요할까?검색 : 정렬된 데이터를 빠르게 검색할 수 있다.분석 : 데이터를 정리해서 보고서나 그래프로 만들 때, 정렬된 상태가 더 유용하다.문제 해결 : 코딩 테스트나 알고리즘 문제에서 정렬은 자주 사용되는 기본 기술이다. 버블 정렬(Bubble Sort) 이해하기 버블 정렬의 원리 버블 정렬은 인접한 두 개의 원소를 비교하여 순서가 맞지 않으면 서로 교환한다.한 번의 반복(패스)마다 가장 큰 값이 맨 뒤로 이동하게 된다.이 과정.. 공감수 0 댓글수 0 2025. 4. 2.
  • Kotlin 연습하기(4)-재귀함수 재귀 함수란 무엇일까?재귀 함수란 자기 자신을 호출하는 함수이다. 즉, 문제를 해결하기 위해 동일한 문제의 더 작은 버전을 반복해서 호출하는 방식이다. 재귀 함수의 구성 요소기본 조건(Base Case) : 재귀 호출을 멈추는 조건이다. 기본 조건이 없으면 함후가 무한히 자기 자신을 호출하게되는 무한루프에 빠지게 된다.재귀 호출(Recursive Case) : 문제를 더 작은 문제로 나누어 자기 자신을 호출하는 부분이다.  재귀 함수 예제1. 팩토리얼 계산(n!)fun factorial(n: Int): Int { // 기본 조건: n이 0이면 1 반환 if (n == 0) { return 1 } // 재귀 호출: n * (n-1)! 계산 return n * fact.. 공감수 0 댓글수 0 2025. 3. 31.
  • Kotlin 연습하기(3) 문자열이란?문자열(String) 이란 여러 문자가 이어진 데이터이다. 예를 들어, "Hello, Kotlin!" 은 하나의 문자열이다. 문자열에서 인덱스 (Index)도 중요한데 인덱스란 문자열의 각 문자의 순서를 나타내며, 첫 번째 문자는 0번 인덱스이다.val text = "Hello"println(text[0]) // 출력: Hprintln(text[1]) // 출력: e Kotlin에서는 문자열을 다루기 위한 다양한 내장 함수를 제공한다.reversed() : 문자열을 뒤집는다.length : 문자열의 길이를 반환한다.contains() : 특정 문자가 포함되어 있는지 확인한다. 리턴값은  true / falsesplit() : 문자열을 특정 구분자로 나눈다.fun main() { val t.. 공감수 0 댓글수 0 2025. 3. 27.
  • Kotlin 연습하기(1) 변수와 자료형변수 : 정보를 저장하는 상자. 예를 들어, 숫자나 글자, 논리값(true/false)을 저장할 수 있다.자료형 : 변수에 어떤 종류의 값이 들어갈 수 있는지 결정한다.  예시) 정수형 : Int / 실수형 : Double / 문자열 : String / 논리형 : boolean 조건문조건문 (if문) : 주어진 조건이 참이면 특정 코드를 실행하고, 그렇지 않으면 다른 코드를 실행할 수 있다.val score = 85if (score >= 90) { println("합격")} else { println("불합격")}// score가 90 이상이면 "합격"을, 그렇지 않으면 "불합격"을 출력한다.  반복문반목문 (for, while) : 같은 작업을 여러 번 반복할 때 사용한다.for.. 공감수 0 댓글수 0 2025. 3. 21.
  • 프로그래머스 - 3진법 뒤집기 (level 1) https://school.programmers.co.kr/learn/courses/30/lessons/68935 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  여기서의 핵심은 3진법으로 바꾼배열 nums 를 뒤집어야 3진순로 변환된 문자열이 된다는 것이다.def radixChange(num, radix): if num == 0: return '0' nums = [] while num: num, digit = divmod(num, radix) # num에는 몫이, digit에는 나머지가 담기게 된다 nums.append(str.. 공감수 0 댓글수 0 2024. 9. 9.
  • 프로그래머스 - 짝지어 제거하기(level2) https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr def solution(s): stack = [] for case in s: if stack and stack[-1] == case: stack.pop() else: stack.append(sase) return 0 if stack else 1 공감수 0 댓글수 0 2024. 9. 4.
  • 프로그래머스 - 이상한 문자 만들기(level 1) https://school.programmers.co.kr/learn/courses/30/lessons/12930 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  홀수와 짝수를 구별하는 문제이다. 가장 쉬운 방법은 변수를 하나 더 만들어 짝수인지 홀수인지 구별하는 것이다. def solution(s): s = list(s) cnt = 0 # 짝수/홀수 구분 인덱스 변수를 기준으로 2로 나누어 떨어질  때(짝수), 나누어 떨어지지 않으면(홀수) 라고 정의할 수 있다. 다만 공백을 만나면 새 단어를 준비한다는 의미이므로 짝수/홀수 구분 변수의 값을 초.. 공감수 0 댓글수 0 2024. 8. 27.
  • 프로그래머스 - 시저 암호 https://school.programmers.co.kr/learn/courses/30/lessons/12926 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  여기서 생각해봐야 할 문제는 주어진 숫자만큼 더하다 보면 숫자가 알파벳의 범위를 벗어날 수 있다는 것이다. 만약 결과가 알파벳의 범위를 벗어나면 해당 알파벳의 처음인 a 또는 A로 돌아가야 한다.(소문자z -> 소문자 a, 대문자 Z -> 대문자 A). def solution(s, n): s = list(s) for i in range(len(s)): if s[i] == ' ' : c.. 공감수 0 댓글수 0 2024. 8. 23.
  • 문자열 문자열의 특징문자열(string)이란 문자(char) 또는 문자들로 구성된 집합을 의미한다. 파이썬에서는 기본적으로 "(큰따옴표)와 '(작은따옴표) 문법을 모두 지원한다.  문자열이란먼저 컴퓨터가 받아들이는 문자열과 사람이 보는 문자열은 차이가 꽤 크다. 모든 것을 숫자로 이해하는 컴퓨터가 문자를 인식하도록 하려면 '문자를 숫자로 변환하는 과정'을 추가로 거쳐야 하며, 이 과저에서 보통 문자 집합(character set)중 가장 대표적인 유니코드를 사용한다. 만약 변수에 문자열로 "Programmers is good"을 할당하면 컴퓨터는 사람이 선언한 문자열을 각 글자에 해당하는 숫자로 인식한다. 그리고 모든 글자에 대한 정보를 한곳에 담아야 하기 때문에 암묵적으로 배열로 선언한다. 기존의 배열처럼 [.. 공감수 0 댓글수 0 2024. 8. 22.
  • 2차원 배열 1차원 배열 + 1차원 배열?다른 언어에서는 '배열은 한 변수에 데이터 여러 개를 선언할 수 있게 해주는 자료형'이라고 할 것이다. '배열은 연속적으로 데이터를 집어넣을 수 있는 1차원 형식의 자료 구조'라고 정의할 수 있다. 배열 안의 배열, 즉 2차원 배열은 어떨까? 2차원 배열은 다음 모습과 같다. data = [[1,2,3],[4,5,6]] 1차원 배열을 선언하면 다음과 같이 한 방향으로 연속적인 데이터가 나열된다. 조회하려는 항목의 순서인 N에서 1을 뺀 숫자가 바로 원하는 데이터를 조회할 수 있는 인덱스이다. 여기에 배열을 하나 더 얹어 2차원으로 선언할 경우 다음과 같이 사각형이 된다. 이 배열에서 원하는 값을 찾으려면 1차원 배열과 다르게 '세로 위치 -> 가로 위치' 순으로 조회해야 한다.. 공감수 0 댓글수 0 2024. 8. 19.
  • 시간 복잡도 문제 해결에 필요한 입력값과 문제를 해결하는 프로그램이 주어졌을 때, 프로그램이 입력값을 받아 동작하고 결과를 만들어내는 데 걸리는 정도를 복잡도라고 한다. 그 중 얼마나 오래 걸리는지는 시간 복잡도라고 하고, 얼마나 많은 메모리를 사용하는지는 공간 복잡도라고 한다.  빅오(Big-O) 표기법실제로 코드를 실행해보면 소프트웨어나 하드웨어적 변수가 많아 똑같은 코드라도 환경에 따라 실행 시간이 조금씩 다르다. 이런 차이 때문에 시간을 정확한 수치로 표현하기는 어렵지만, 문법이나 구성에서 발생하는 비용을 수치화해 문제를 푸는 데 필요한 총 연산의 수를 수학적으로 표기할 수 있다. 이를 점근 표기법이라고 하며, 세 가지 표기법 중 가장 흔하게 사용하며, 최악의 경우를 계산하는 계산법을 빅오(Big-O) 표기법.. 공감수 0 댓글수 0 2024. 8. 16.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.