본문 바로가기

분류 전체보기151

분할 정복 알고리즘(Divide and Conquer Algorithm) 목차 머리말 들어가기 전에 정렬 알고리즘 저번에 포스팅한 정렬 알고리즘에서 버블 정렬과 선택 정렬, 삽입 정렬에 대해 알아 보았다. 효율성 이 세 가지 정렬 알고리즘은 코드가 직관적이긴 하지만 데이터 크기 n에 대한 이중 for 문으로 되어 있기에 굉장히 비효율적이다. 분할 정복 알고리즘 이들의 시간복잡도는 $O(n^2)$이다. 보다 효율적인 정렬 알고리즘을 배우기 위해 분할 정복(Divide and Conquer)에 대해 알아 보자. 배우기 전 알아야 할 개념 재귀 그렇다면 위의 3단계는 어떻게 구현할 수 있을까? 분할과 정복, 통합은 재귀적으로(recursively) 하는 것이다. 따라서 재귀 알고리즘에 대해 먼저 알아야 분할 정복 알고리즘을 제대로 알 수 있다. 분할 정복 알고리즘(Divide an.. 2023. 3. 29.
[Swift] enumerated()로 인덱스와 요소를 모두 반환하기 Swift의 문자열이나 배열에서 어떻게 하면 인덱스와 요소를 하나로 묶은 채 모두 출력할 수 있을까? 바로 enumerated() 메서드를 이용하면 된다. enumerate는 '열거하다'라는 뜻의 영단어이다. 📌 공식 문서 링크 enumerated() | Apple Developer Documentation Collection Types | Documentation 콜렉션 타입(Collection Types) | Swift 📌 요약 Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence. 쌍으로 묶은 (n, x) 과.. 2023. 3. 28.
프로그래머스) 분수의 덧셈 (Swift) 📌 문제 코딩테스트 연습 - 분수의 덧셈 | 프로그래머스 📌 접근 방식 두 분수를 더하여 기약분수로 만드는 알고리즘은 크게 세 단계로 나누어진다. 통분: 서로 다른 분모를 같게 만든다. 덧셈: 분모를 같게 하기 위하여 곱해진 분자를 서로 더한다. 약분: 분모, 분자를 더 이상 나눌 수 없을 때까지 나눈다. → 최대공약수 이용 여기서 통분과 덧셈은 단순한 사칙연산으로 해결이 가능하지만, 약분에서는 최대공약수를 구하여 한번에 나누는 게 핵심이다. 최대공약수을 구하는 방법은 유클리드 호제법을 이용했는데, 이에 대한 설명은 아래에 자세히 다루었으니 참고 하자. [재귀] 유클리드 호제법과 최대공약수, 최소공배수 유클리드 호제법을 배워 보고 재귀적으로(recursively) 구현한 것과 반복적으로(iterative.. 2023. 3. 27.
[Swift] OT - 독학 사이트와 강의 모음 Swift를 이것저것으로 공부를 하는데 너무 난잡한 것 같아 정리의 필요성을 느껴 블로그로 작성하게 되었다. 공부하는데 좋은 자료들을 발견하면 계속 업데이트 할 예정이다. 📌 공식 문서 공식 문서만큼 확실하고 정확한 소스는 없을 것이다. 하지만 완전 초급자라면 이해해야 할 개념이 너무 많아서 오히려 많이 힘들 수 있다. 더군다나 평소에 긴 글을 읽고 해석하는 것에 약하면 더 그렇다. 공식 문서는 프로그래밍 언어에 어느 정도 틀이 잡힌 상태에서 보는 게 좋다. 공식 문서 사이트는 아래의 2가지가 있다. Swift 공식 문서 애플 개발자 공식 문서 1번은 글로 길게 풀어 쓴 설명과 예제 코드로 설명 되어 있다면, 2번은 주로 사전처럼 단어나 문법, 용어과 짧은 설명으로 되어 있다. 또한 1번은 한글 번역본이.. 2023. 3. 27.
프로그래머스) sublime 자주 쓰는 단축키 (Mac) 프로그래머스의 sublime으로 코딩 테스트를 푸는데 중간에 편집하고 다듬는 과정은 여간 번거롭지 않다. 더군다나 sublime의 단축키는 기존에 쓰던 IDE의 단축키와 같은 것도 있고 다른 것도 있어 더 헷갈린다. Visual Studio Code에서 자주 쓰던 단축키 기능이 sublime에도 있나 해서 찾아 보며 정리해 봤다. 문제를 풀며 자주 쓰는 것들을 모아 봤는데, 유용한 것이 있으면 계속 업데이트 할 예정이다. 📌 한 줄 편집 단축키 설명 CTRL + CMD + ↑/↓ 줄 전체 위/아래로 한 줄 이동 CMD + SHIFT + D 줄 전체 복제 CMD + X 줄 전체 잘라내기 CMD + RETURN 커서부터 줄 처음까지 삭제 CMD + K 커서부터 줄 끝까지 삭제 📌 다중 커서 편집 단축키 설명.. 2023. 3. 27.
[CS50 2019] (컴퓨팅 사고) 이진법 컴퓨터 과학이 무엇인지 알아 보자. 사람이 정보를 어떻게 표현하는지 생각해 보고, 컴퓨터는 정보를 어떻게 표현할 수 있는지 그 방법에 대해 알아 보자. 📌 컴퓨터 과학(Computer Science) 강의에서 교수님은 컴퓨터 과학에 대해 아래와 같이 설명했다. What is computer science? It's just a process of solving problem. 컴퓨터 과학은 무엇일까? 이것은 문제를 해결하는 과정일 뿐이다. 컴퓨터 과학이 문제를 해결하는 과정이라면, '문제를 해결하는 과정'은 과연 무엇일까? 어떠한 문제를 입력(input) 받아 적절한 답안의 출력(output)을 구하는 문제 해결 과정(a process of solving problem)이라 할 수 있다. Inputs a.. 2023. 3. 26.
[CS50 2019] 모두를 위한 컴퓨터 과학 OT 현재 자료구조와 알고리즘, 운영체제를 조금씩 공부하는데 틈틈이 막히는 부분이 있다. 비전공자로서 CS 과목을 공부하는 게 쉽지 않은데 적절한 강좌를 찾았다. 바로 하버드대학교 데이비드 맬런 교수의 '모두를 위한 컴퓨터 과학(CS50)'이다. 네이버 부스트코스에 한글 자막과 함께 무료로 공개되어 있으며, YouTube에도 원본 영상이 있다. 자세한 링크는 아래에 적어 두었다. 이왕 CS 과목 공부하는 김에 기초부터 확실히 해 보자는 생각에 수강하게 되었다. 이미 아는 내용도 있긴 하지만 복습의 기회로 삼기로 했다. 모두를 위한 컴퓨터 과학 (CS50 2019) 강좌소개: 부스트코스 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 부스트코스에서 Top3.. 2023. 3. 25.
[백준] (Python/Swift) 3040번: 백설 공주와 일곱 난쟁이 📌 문제 3040번: 백설 공주와 일곱 난쟁이 📌 올바른 풀이 7개의 옳은 데이터를 찾는 게 아닌 그것의 여집합인 2개의 틀린 데이터를 찾는 것이 핵심이다. 그 2개의 데이터를 어떻게 다루냐에 따라 여러 방식이 있을 것이다. 압도적으로 크거나 압도적으로 작은 수로 재할당 하거나 처음 발견한 두 깂을 저장하여 배열에서 삭제하거나 적당한 수(0이나 -1)로 재할당 하되, 이중 for 문을 한번에 break 하여 빠져 나오는 것이다. 아래의 내용은 초반에 잘못된 방식으로 접근하여 작성한 풀이와 코드이다. 📌 잘못된 풀이 7개의 옳은 데이터를 찾는 게 아닌 그것의 여집합인 2개의 틀린 데이터를 찾는 것이 핵심이다. 이중 반복문을 돌 때, Python의 range() 함수와는 다르게 이중 for 문에서 바깥쪽 f.. 2023. 3. 25.
[운영체제] 프로세서의 동작 과정과 명령어의 실행 명령어의 구조에 대해 살펴 보았으니 이제 프로세서가 어떻게 동작되고 명령어가 어떻게 실행되는지 알아 보자. 이전 글: [운영체제] 명령어의 구조 📌 프로세서의 동작 과정 프로세서의 동작 과정은 크게 4가지로 나눠볼 수 있다. 인출: 메모리의 데이터를 CPU의 레지스터로 가져오는 과정 해석: 인출한 명령어를 바탕으로 CPU의 레지스터를 제어 장치로 가져와 해석하는 과정 실행: 해석한 명령어를 통하여 산술/논리 장치(ALU)에서 계산하고 누산기에 일시적으로 보관하는 과정 저장: 계산되어 누산기에 보관된 데이터를 메모리에 저장하는 과정 📌 명령어의 실행 이제 명령어의 실행 과정을 알아 보자. 이미지: bournetocode.com 인출 프로그램 카운터(PC)에는 다음에 실행할 명령어의 주소가 있다. 명령어 주.. 2023. 3. 24.
Swift 자료형(Data Types) 목차 머리말 들어가기 전에 이전 포스팅 - 상수와 변수(Constants and Variables) 저번 포스팅에서는 Swift의 상수와 변수에 대해 알아 보았다. 이번 포스팅 이번에는 Swift의 다양한 자료형에 대해 알아 보자. 각 자료형의 특징을 살펴 보고 어떠한 문법으로 작성해야 하는지 알아 보자. 자료형(Data types) 자료형은 변수(혹은 상수)를 담는 '그릇'이라 할 수 있다. 같은 음식이라도 어떤 그릇에 담냐에 따라 그 형태가 달라지듯이, 같은 데이터라도 어떠한 자료형에 담냐에 따라 그 값이 달라진다. 자료형의 종류 1. 정수(Integers) 1-1. Int - 64비트 정수 var MtHallaSeaLevel: Int = 1950 print("MtHallaSeaLevel: \(MtH.. 2023. 3. 24.
반응형