본문 바로가기

분류 전체보기151

컴퓨팅 사고) 정보의 표현 (in CS50 2019) 목차 앞선 포스팅에서는 컴퓨터가 이진법으로 정보를 표현하는 방법에 대해 알아 보았다. 이번에는 컴퓨터가 실제로 문자나 사진, 음악, 동영상 등의 다양한 정보를 처리하는 방식에 대해 알아 보자. 1. 문자의 표현 이진법(binary)를 통하여 컴퓨터로 문자를 표현할 수 있다. 예를 들어, Andy라는 단어를 표현하고 싶으면 십진법으로 65 110 100 121 로 표현할 수 있다. 그 중 $A$는 이진법으로 $1000001_{(2)}$로 표현할 수 있다. 어떻게 이렇게 표현할까? 바로 아스키(ASCII)를 이용하면 이렇게 표현이 가능하다. (1-1) 아스키/아스키 코드 미국 정보 교환 표준 부호(ASCII; American Standard Code for Information Interchange) 아스키.. 2023. 4. 5.
[Git] git config로 alias 단축어 설정하기 이전 포스팅에서는 git config로 사용자 정보를 설정하는 방법을 알아 보았다. [Git] git config로 사용자 정보 설정하기 - 등록/조회/삭제 git을 사용하기 위해서는 git의 사용자에 대한 정보를 등록해야 된다. 또한 등록한 정보를 조회하거나 삭제할 때도 있다. git config를 통해 이를 설정해 보자. 많은 설정 옵션이 있지만, 자주 쓰이는 andy-archive.tistory.com git 명령어를 입력하다 보면, 긴 길이의 명령어를 매번 입력하는 게 번거로울 때가 종종 있다. 단축어를 설정하여 좀 더 효율적으로 git 명령어를 입력해 보자. 📌 git config --global 단축어 설정은 일반적으로 현재 작업 중인 저장소에만 하지 않고 다른 여러 저장소에도 적용할 것이다... 2023. 4. 5.
퀵 정렬(Quick Sort) in Python 목차 머리말 들어가기 전에 합병 정렬에 이어 분할 정복 알고리즘을 이용한 두 번째 정렬인 퀵 정렬에 대해 알아 보자. 퀵 정렬(Quick Sort) 정의 기준 데이터(피벗, pivot)를 설정하여, 그 기준보다 큰 데이터와 작은 데이터를 구분하는 '분할(partition) 알고리즘'을 재귀적으로(recursively) 반복하여 다시 조합해 나가는 정렬 알고리즘 배열 중에서 임의의 데이터를 '피벗(pivot)'이라 불리는 기준 데이터로 설정한다. 피벗을 기준으로 자기보다 크기가 작은 그룹과 큰 그룹을 최대한 분할한 이후 조합하면서 정렬을 해 나가는 알고리즘이다. 동작 과정 Sorting quicksort animation - Quicksort - Wikipedia 동작 과정 분할 정복 알고리즘에 맞게 세 .. 2023. 4. 4.
[프로그래머스] (Swift) 정수 제곱근 판별 - Lv.1 📌 문제 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 스쿨 📌 풀이 Swift의 squareRoot() 메서드와 삼항 연산자를 이용해 풀어 보았다. squareRoot() | Apple Developer Documentation 다만, squareRoot()는 Double에 있는 공식 문서여서 형 변환에 유의해야 한다. 문제의 함수의 반환값 또한 Int가 아닌 Int64이니 그에 맞게 형 변환을 하자 📌 코드 func solution(_ n:Int64) -> Int64 { // n의 제곱근을 상수로 할당 let root = Int64(Double(n).squareRoot()) // 제곱근이 실제로 맞으면 원하는 조건의 반환값을, 아니면 -1을 반환 return root * root == n ? .. 2023. 4. 3.
[백준] (Swift) 1850번: 최대공약수 📌 문제 1850번: 최대공약수 📌 풀이 처음에는 입력값이 실제 정수가 아닌 1의 개수라서 이를 정수로 변환하는 함수를 만들었다. 하지만 그렇게 하면 입력값이 클 경우 시간이 너무 오래 걸리는 경우가 생겼다. 몇 번 실제로 값을 계속 넣어 보니 겉으로만 1의 개수이지, 1의 개수들끼리 최대공약수를 구하여 이를 정수로 변환만 하면 된다. 이를 눈치채지 못하면 계속 돌고 돌아 멘붕에 빠질 수 있다. 최대공약수를 구하는데 사용한 유클리드 호제법(Euclidean Algorithm)은 아래의 링크에서 자세히 설명해 두었다. [재귀] 유클리드 호제법과 최대공약수, 최소공배수 [재귀] 유클리드 호제법과 최대공약수, 최소공배수 유클리드 호제법을 배워 보고 재귀적으로(recursively) 구현한 것과 반복적으로(it.. 2023. 4. 3.
재귀) 유클리드 호제법과 최대공약수, 최소공배수 목차 머리말 들어가기 전에 유클리드 호제법을 배워 보고 재귀적으로(recursively) 구현한 것과 반복적으로(iteratively) 구현한 것을 서로 비교해 보자. 재귀(Recursion)에 대한 개념이 궁금하다면? 본문 유클리드 호제법(Euclidean Algorithm) 이름도 어려운 호제법은 무엇일까? '호제(互除)'는 '서로 덜어낸다'는 뜻이다. '무엇을 덜어내냐' 하면 바로 '큰 수를 작은 수로 나눈 나머지'를 구하는 것이다. 또다시 기존의 작은 수는 큰 수가 되고, 구한 나머지는 작은 수가 되어 또 다른 나머지를 구한다. Mathematical Treasure: First Euclid's Elements in Greek and Latin | Mathematical Association of.. 2023. 4. 2.
[Git] git config로 사용자 정보 설정하기 - 등록/조회/삭제 저번 포스팅에서는 git의 전체적인 흐름에 대해 알아 보았다. 이번에는 실제로 git의 작동 방법에 대해 알아 볼건데, 그 중 첫 번째로 git의 사용자 정보를 설정해 보자. [Git] 깃(git)과 작업 흐름(workflow)에 대하여 git을 사용하기 위해서는 git의 사용자에 대한 정보를 등록해야 된다. 또한 등록한 정보를 조회하거나 삭제할 때도 있다. git config를 통해 이를 설정해 보자. 많은 설정 옵션이 있지만, 자주 쓰이는 것들에 대해 알아 보자. 📌 정의 git config는 말 그대로 git repository(저장소)의 사용자에 대한 환경 설정을 하는 명령어이다 config는 configure라는 영단어의 줄임말로, '(컴퓨터의) 환경을 설정하다'라는 뜻이다. 환경 설정 중에도 .. 2023. 4. 1.
[Git] git의 개념과 작업 흐름(workflow)에 대하여 개발자의 협업 도구에 필수적인 Git은 무엇일까? 왜 사용하고 어떤 특징을 갖고 있을까? 그리고 git을 이용한 작업 흐름(workflow)은 어떻게 나누어 볼 수 있을까? 📌 정의 Git 공식 홈페이지에 소개한 Git의 개념을 한번 살펴 보자. Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. 깃(Git)은 소규모 프로젝트부터 초대형 프로젝트까지 모든 것을 빠르고 효율적으로 다룰 수 있게 디자인 된 무료이며 오픈 소스인 분산된 버전 제어 시스템(distributed versi.. 2023. 4. 1.
[논리 회로] NOT과 OR, AND, XOR의 구현 이진법에 대한 개념을 배워서 실제로 논리 게이트(logic gate)로 이진법이 컴퓨터에서 어떻게 실제로 계산되는지 알아 보았다. [CS50 2019] 컴퓨팅 사고 - 이진법 [CS50 2019] (컴퓨팅 사고) 이진법 컴퓨터 과학이 무엇인지 알아 보자. 사람이 정보를 어떻게 표현하는지 생각해 보고, 컴퓨터는 정보를 어떻게 표현할 수 있는지 그 방법에 대해 알아 보자. 📌 컴퓨터 과학(Computer Science) 강의에 andy-archive.tistory.com 📌 NOT $\mathrm{NOT}$은 입력 값이 $0$이면 $1$, $1$이면 $0$으로 바꿔 출력한다. +-----------+ | NOT table | +-----------+ | IN = OUT | +-----------+ | 0 =.. 2023. 3. 31.
합병 정렬(병합 정렬; Merge Sort) in Python 지난 글에 분할 정복 알고리즘의 개념에 대해 알아 보았다. 이제는 실제로 이를 적용한 합병 정렬에 대해 알아 보자. [알고리즘] 분할 정복(Divide and Conquer) 개요 정렬 알고리즘에서 버블 정렬과 선택 정렬, 삽입 정렬에 대해 알아 보았다 이 세 가지 정렬 알고리즘은 코드가 직관적이긴 하지만 $n$(데이터의 크기)에 대한 이중 for 문으로 되어 있기에 굉장히 andy-archive.tistory.com 📌 정의 합병 정렬(merge sort)은 주어진 배열을 더 이상 쪼갤 수 없을 때까지 재귀적으로 데이터 크기의 절반으로 계속 나누고, 다시 정렬을 통합하여 정렬하는 알고리즘이다. 📌 동작 과정 합병 정렬은 요소가 하나가 될 때까지 계속해서 절반으로 나눈 뒤, 조합해 가면서 정렬해 나간다... 2023. 3. 30.
반응형