분류 전체보기
-
글자와 이모티콘을 컴퓨터가 어떻게 알고있지? | Harvard CS50 Week 0 ScratchComputer Science/CS 50 Harvard 2021. 10. 27. 19:22
강의정보 ASCII 컴퓨터는 숫자로 대화한다. 그렇다면 컴퓨터에게 글자는 어떻게 알려줘야 좋을까? 바로 숫자와 글자를 map, 즉 매칭시켜주면 된다. 수십년전, 이렇게 숫자를 글자와 매칭하는 시스템을 만들었는데, 예를들면 알파벳 A는 65, B는 66과 같은 식이다. Binary(이진법)으로 표현하자면 "A"는 다음과 같다. 0 1 0 0 0 0 0 1 이런식으로 특수기호, 알파벳 대소문자를 연결해둔 map을 ASCII라고 한다. 아래 표를 보면, 각 숫자들이 어떻게 연결되어있는지 알 수 있다. 우리가 문자를 받았을 때, 사실 핸드폰에는 72, 73, 그리고 33과 같은 정보가 전달된다. 이 bits들은 ASCII를 잘 살펴보면 HI! 라는 텍스트인것을 확인할 수 있다. 더 정확하게는, 각 캐릭터(cha..
-
숫자를 나타내는 방법들 | Harvard CS 50 Week 0Computer Science/CS 50 Harvard 2021. 10. 26. 05:51
영상 강의 15:50 부터... 숫자를 세는 다양한 방법들 한 방에 몇명이 있는지 셀 때, 아마 우리는 손가락을 사용해서 1인당 1개의 손가락을 사용할것이다. 이 시스템은, unary(단항)라고 부르는데, 각각의 digit이 1을 의미하는것이다. 만약, 더 큰 숫자를 세야한다면, 우린 아마도 ten digits, 0부터 9라는 숫자들을 사용하는데, 이것을 decimal(십진법)이라고 부른다. 컴퓨터는 이보다 간단한 시스템을 쓰는데, 0과 1만을 사용하는 binary(이진법)이다. Binary (이진법) binary에서 0은 아래같이 나타낼 수 있다. 0 0 0 그리고 이것은 1이다 (여기서, 우리는 앞에 0 0 은 사실 안써도 되지만, 패턴을 간소화 하기위해서 붙여준것이다) 0 0 1 그리고, binar..
-
컴퓨터 공학이란? | Harvard CS50 Week 0 ScratchComputer Science/CS 50 Harvard 2021. 10. 26. 05:17
This is CS 50 | Week 0 Scratch 정말 좋은 세상이다. 하버드 수업을 실시간으로 또는 녹화 영상을 집에서 볼수 있다! CS50은 컴퓨터공학의 기본이 되는 지식을 배울 수 있는 수업이고, 하버드의 역사가 깊은 수업이다. 강의 슬라이드, 영상, 소스코드부터 노트까지 모두 하버드에서 공개를 하기 때문에 누구나 무료로 들을 수 있다. 유투브 채널도 있는데, 이번 가을 학기는 벌써 8주차가 되었고, 지난 학기들 영상부터 다양한 컴공과 지식을 얻을 수 있다. 오늘부터 시간날때마다 이 강의를 한글로 정리해보려고 한다. 컴퓨터공학이란 뭘까? 컴퓨터 공학(Computer Science)는 근본적으로 problem solving, 즉 문제를 푸는것이다. 단, 정확하게(precise) 그리고 체계적으로..
-
Linked List | Partition ListAlgorithm/Linked List 2021. 7. 19. 23:07
Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in each of the two partitions. 주어진 Linked List를 파티션 하라는 문제이다. Integer 값이 주어지는데, 이보다 작으면 순서대로 왼쪽에, 크거나 같으면 순서대로 오른쪽에 나열해서 새로운 Linked List를 리턴하는 문제이다. Dummy Node를 이용해서 손쉽게 풀 수 있다. /** * Definition for ..
-
Linked List | Rotate List카테고리 없음 2021. 7. 13. 21:17
Given the head of a linked list, rotate the list to the right by k places. 리스트를 k번 돌리라는 medium 난이도의 문제이다. 시계 반대방향으로 도는것인데, 맨 마지막 노드를 앞으로 가져오는 방식이다. 이 k는 노드 길이보다 더 길 수 있다. 예를들면, 5개 노드가 있는 리스트를 2 * 10^9회 돌라고 할 수 있다. 조건은 아래와 같다. k의 값이 아주 크기때문에, 시키는대로 한번씩 돌면, 매우 효율적이지 않다. 그래서 나머지를 구하는 modulus(%) 를 이용한 해법을 구현했다. 솔루션은 아래와 같았다. class Solution { public ListNode rotateRight(ListNode head, int k) { if(hea..
-
Linked List | Swap Nodes in PairsAlgorithm/Linked List 2021. 7. 12. 15:45
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.) 2 노드씩 짝을 지어서, 순서를 바꾸라는 문제이다. 또한, 값을 변형하는것이 아닌, 노드의 위치를 바꾸라는 문제이다. 만약 노드의 갯수가 0개, 1개일 경우는 그대로 리턴해야하며, 노드 갯수가 홀수일 때, 마지막 노드는 그대로 둔다. 한번의 Trip만에 해결할 수 있는 방식이 떠올라 바로 코딩을 했다. 해법은 아래와 같다. class Solution { publi..
-
Linked List | Remove Nth Node From End of ListAlgorithm/Linked List 2021. 7. 11. 21:01
Given the head of a linked list, remove the nth node from the end of the list and return its head. 끝에서 N번째 노드를 지우라는 문제이다. 맨먼저 생각할 수 있는 가장 간단한 방법은, 끝까지 한번 여행을 한 후, 총 갯수를 알아내어 n번만큼 빼고 다시 가게 해서 그 노드를 지우는 방법이다. 하지만 이 방법은 최대 2N의 Travel을 해야한다. 이것 말고, 두개의 포인터를 사용해서 차이를 두고 loop을 도는 방식으로 접근하게되면 더 빠르게 찾아낼 수 있다. 처음에는, n만큼을 덜 가서, 그 전 노드에서 그 다다음 노드로 연결하는것이 복잡해 보였지만, dummy node를 맨 앞에 만들어두고, 어떠한 경우든지 (맨 첫번째나 맨..
-
Android Basics in KotlinAndroid Development/Android Basics 2021. 7. 11. 19:47
안드로이드 개발을 시작하기에 앞서서, 개발 언어를 결정하고 기본적으로 어떤 방식으로 개발하는지에 대해 배워보려고 한다. 요즘에 핫한 Kotlin을 이용한 개발을 진행할것인데, 공식 문서에서 제공하는 course를 따라서 해보려고 한다. 안드로이드 폰이 있으면 좋지만, 컴퓨터로 시뮬레이트 할수도 있다. IDE를 설치할 필요 없이, 기본 설명을 들은 후, Chrome과 같은 최신 웹 브라우저로 Codelab으로 이동하면, 바로 실험을 시작할 수 있다. (인터넷 엑세스가 있어야한다). 한글 번역이 잘 되어있기 때문에, 주어진대로 따라하면, 충분히 따라할 수 있다. Reference https://developer.android.com/kotlin/androidbasics Kotlin의 Android 기본 사항..