[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기
반응형

분류 전체보기 495

네트워크의 기본

네트워크? 컴퓨터들끼리 서로 연결되서 통신하는 것 연결된 컴퓨터끼리 서로 0,1의 원초적 신호를 보낸다. (이를 OS가 해석하여 정보를 얻는다.) 클라이언트 : 네트워크에서 정보를 요청하는 주체 서버 : 네트워크에서 정보를 제공하는 주체 컴퓨터가 연결되는 방식 컴퓨터가 연결되는 방식은 유선(랜선)방식과 무선(와이파이)방식이 있다. 유선(랜선) : 0,1의 신호를 빛으로 변환하여 전송하는 광케이블 방식. 무선(와이파이) : 0,1의 신호를 전파로 변환하여 공기중으로 쏴서 전송하는 방식. 프로토콜 컴퓨터와 OS의 종류는 다양한데, 무작정 통신을 하면 원활한 통신이 어려울 수 있다. 따라서 어떠한 규격이 존재하는데, 이 규격을 프로토콜 혹은 통신 프로토콜이라고한다. 대표적으로 웹에서 사용하는 HTTP 프로토콜..

OS(운영체제)의 기본

컴퓨터의 하드웨어 구성 CPU : 연산 및 신호를 처리하는 장치 메모리 : 계산한 것, 계산해야 할 것을 저장하는 장치. 단기 기억장치. 디스크 : 메모리와 달리 영구적으로 데이터를 저장해주는 장치 (하드디스크, SSD) 프로세스 OS가 CPU와 메모리를 활용하여 실행시킨 프로그램 실행시킨 코드와 코드가 돌아갈때 쓰일 메모리가 같이 할당되어 있다. OS 프로그램을 사용할 때 그것을 작동시키는 환경. - CPU와 메모리에 일을 하라는 명령을 한다. - 컴퓨터용어로 '자원'은 CPU,메모리가 일을 할 수 있는 용량인데, OS가 이를 효율적으로 관리한다. 즉, 하드웨어장치를 관리해준다. 그 외에도 입출력장치나 네트워크 통신, 파일관리 등 다양한 일을 한다. - 프로세스가 많아져 CPU와 메모리의 사용량이 높아..

[알고리즘 연습] 자릿수의 합 비교하기 (by C++)

자릿수의 합 비교하기 자연수 n을 받고, n개의 자연수를 받는다. 각 자연수의 각 자릿수를 모두 더한 값(자릿수의 합)을 비교하여 그 값이 가장 큰 자연수를 출력한다. 자릿수의 합이 같을 경우 더 큰 수를 출력한다. 예를들어 5를 n으로 입력하고, 125 15232 79 1325 97를 입력하면 97이 출력된다. 풀이 #include int digit_sum(int x) { int tmp,sum = 0; while (x>0) { tmp = x % 10; sum += tmp; x = x / 10; } return sum; } int main() { //freopen("input.txt", "rt", stdin); int n, num, i, sum, max=-2147000000, res; scanf("%d"..

[알고리즘 연습] 영어단어 복구 알고리즘 (by C++)

영어단어 복구 알고리즘 특정 단어를 대소문자 구문없이 중간중간 공백을 포함하여 한줄로 입력하면, 그를 소문자의 이어진 문자로 복구해주는 알고리즘이다. 예를 들어, 'bE au T I fu L'과 같이 입력하면 이를 'beautiful'로 바꾸어 출력해준다. 풀이 #include int main(){ //freopen("input.txt", "rt", stdin); char a[101], b[101]; int i, p=0; gets(a); for(i=0; a[i]!='\0'; i++){ if(a[i]!=' '){ if(a[i]>=65 && a[i]

[알고리즘] 합병 정렬 (분할정복 활용)

특정 리스트를 정렬하는 방법에는 여러 가지가 있다. 그중에서도 대표적으로 분할 정복을 활용하여 리스트를 정렬하는 것이 합병 정렬, 퀵 정렬이다. 그 중 합병 정렬에 대해 알아보자. 합병 정렬은 병합 정렬이라고도 불린다. 정렬된 두 리스트의 합 정렬 먼저 알아야 할 것이 있다. 합병 정렬은 정렬된 임의의 두 리스트가 있을 때, 두 리스트를 합치면서 정렬하기 위해서는 두 리스트의 성분을 처음부터 하나씩 비교해면서 새로운 리스트에 넣어주다가 둘 중 어느 한 리스트의 성분 모두 없어지면, 나머지는 그냥 새로운 리스트의 뒤에 들어가면 된다. ex. [1,2,3,5] [4,6,7,8]이 있을 때 이를 합치면서 정렬하려 한다. 처음부터 성분을 비교하면서 넣다 보면 어느 순간 새로운 리스트에 [1,2,3,4,5]까지 ..

[알고리즘] 비트연산자를 활용하여 부분집합 만들기

비트연산자를 활용하여 부분집합 만들기 n이 어떤 집합의 원소 갯수라고 하자. - 특정 부분집합에 대한 특정 원소의 포함여부는 각 원소마다 2가지 경우를 가진다. (들어간다 or 들어가지 않는다.) - 이를 원소의 갯수만큼 반복하여 생각하면, 모든 부분집합의 경우의 수를 알 수 있다. - 즉, 어떤 집합의 부분집합은 2의 n승 만큼 존재한다고 할 수 있다. 이를 활용하여 특정 집합의 부분집합들을 찾을 수 있다. - 우선 부분집합의 개수를 비트 형태로 생각해보자. 배열 arr이 6개의 원소를 가진다면, - 000000~111111의 숫자로 대변할 수 있는 부분집합들을 가질 것이다. (2의 n승개) 이를 기반으로 각 부분집합을 한줄씩 출력해주는 코드를 작성해보았다. 1 2 3 4 5 6 7 8 9 arr = ..

[알고리즘] 완전검색 (Brute force)

완전검색 (Brute force) 완전검색은 Brute force라고 불리는 만큼 매우 무식한 알고리즘 기법이다. 가능한 경우의 수를 전부 확인하고 답을 그 중에서 답을 찾아내는 것이다. 어떤 리스트에서 숫자 100을 찾을 때 해당 리스트를 전부 돌면서 숫자 100과 일치하는 값을 찾는 것이 그 예시이다. 사실 나는 이것을 알고리즘이라 불러도 되는지도 잘 모르겠다. 하지만 오류없이 답을 확실하게 찾아낼 수 있고, 가능한 경우의 수가 적을 때는 상당히 유용하게 사용된다고 한다. 자격 검정 시험 등에서도 우선 완전검색 방법으로 답을 도출해낸 다음, 성능 개선을 위해 다른 알고리즘을 도입하는 것이 바람직하다고 할 수 있겠다.

[알고리즘] Greedy Algorithm

Greedy Algorithm Greedy Algorithm은 말그대로 탐욕적인 알고리즘이다. 목표를 이루기 위해 큰 그림을 바라보지 않고, 현재 가장 좋아보이는 것으로 이동해나간다. 예를 들어, 더 높은 산을 가기위한 알고리즘을 구현한다고 할때 A산은 현재 30도의 경사를 보이고, B산은 현재 40도의 경사를 보인다고 하자. B산이 현재 경사가 더 높다고 해서 더 높은 산이 되는 것은 아닐 것이다. 하지만 Greedy Algorithm은 해당 정보를 기반으로 B산을 선택하고 올라간다. 이렇듯, Greedy Algorithm은 완벽한 결과를 보장해주지는 않는다. 하지만 간혹 Greedy Algorithm이 완벽한 결과를 도출해내는 경우도 있고, 속도가 매우 빨라 다른 느린 알고리즘을 대신하여 많이 사용된..

[알고리즘] 다이나믹 프로그래밍 (DP)

다이나믹 프로그래밍 다이나믹 프로그래밍이란 어떤 문제를 해결하는 것에 있어, 중복적인 계산을 최대한 피하는 방법이다. (2*5) + (2*6)의 문제를 해결할 때를 생각해보자. (2*5)만 알면 (2*6)은 (2*5 + 2)로 해결할 수 있다. 따로 (2*5)를 또 계산할 필요가 없이 미리 해결한 (2*5)의 결과값을 이용한 것이다. 이것이 다이나믹 프로그램의 핵심이다. 문제가 더더욱 복잡하고 중복되는 계산이 많은 상황에서는 여러 계산과정을 생략할 수 있어 유용할 것이다. 좀 더 자세히 살펴보자. 다이내믹 프로그래밍의 조건 1. 최적 부분 구조 : 부분 문제의 최적의 답을 통해 상위문제(기존문제)의 최적의 답을 구할 수 있다. ex. 피보나치 수, fib(n) = fib(n -1) + fib(n - 2)..

반응형