본문 바로가기

전체 글92

Select Sort - 선택 정렬과 코드 선택정렬은 거품정렬과 비슷하다. 둘다 반복문을 완전히 2번 돈다는 점에서 최선/평균/최악의 시간복잡도가 n^2로 같다. 다른 점은 선택정렬이 거품정렬보다는 swap 횟수(메모리 이동)이 적을 수 있다는 것이다. 예를 들어 2 3 5 1 과 같은 배열을 오름차순으로 정렬한다고 하면 선택 정렬로 정렬하는 과정은 다음과 같다. 선택 정렬은 각 반복마다 가장 끝에 최대값을 찾아 넣는다. 그래서 N길이의 배열의 경우 첫 반복에는 arr[N-1] = MAX(arr[0] ~ arr[N-1]) 이 들어가고 다음 반복에는 arr[N-2] = Max(arr[0] ~ arr[N-2]) 가 들어가게 된다. 의사코드를 작성해보면 아래 같은 느낌이다. for ( i = 0 ~ N-1 ){ for( j = 1 ~ N-1-i ){ .. 2022. 7. 5.
Bubble Sort - 거품 정렬과 코드 지금까지 내가 알고있기로는 버블 소트는 앞으로 다룰 정렬중에서 가장 정직하고(?) 가장 비효율적인 정렬이다. 그래서 이 정렬이 실제로 쓰이는지 궁금하기도하다. 오름차순의 경우, 거품 정렬은 뒤에 있는 데이터와 값을 비교하면서 앞의 데이터가 뒤의 데이터보다 크면 위치를 교환한다. 처음에는 주어진 배열의 처음에서 끝(N)까지 탐색, 그 뒤로는 처음부터 N-1까지 탐색, 그 뒤로는 N-2까지 탐색하며 탐색 범위를 줄여나간다. 그래서 처음 탐색을 완료하면 N번째에는 제일 큰 수가 오고 다음으로 탐색을 완료하면 N-1번째에는 그 다음으로 큰 수가 온다. 예를 들어 1, 5, 3, 2, 4 라는 배열이 있을 때 이를 거품정렬을 한다면 다음과 같을 것이다. 이 과정을 의사코드로 나타내면 for(int i = 0; i.. 2022. 7. 5.
[4] 컴퓨터 내부 구조 (1) 지난 3장에서는 비트를 사용하는 컴퓨터가 어떻게 비트를 기억하는지에 대해 다뤘다. 이를 통해 컴퓨터의 저장 장치들인 레지스터, 램, 롬, 디스크 등에 대해 간단히 다뤘었다. 현대적 컴퓨터는 대략적으로 기억장치, 입출력장치, 중앙처리장치와 같이 세 가지 부분으로 나눌 수 있는데 이번 장에서는 이 세 부분이 어떻게 연관 되어 있는 지에 대해서 다룬다. 이번 글에서는 메모리와 입출력에서 다루고 다음글에서는 중앙처리장치에 대해서 다루려고한다. 1. 메모리 메모리는 메모리 주소가 있고 각 메모리들과 연결되어있는 메모리 길이 있다. 버스나 실제 부분을 생각하지 않고 추상화해서 생각해보면, 메모리 길에 프로세서에 따른 4차선 또는 8차선 등의 도로가 나 있다고 보면, (SRAM같은 경우는 고속도로, 디스크의 경우 비.. 2022. 5. 11.
[3] 메모리와 디스크의 핵심 순차논리 지난 2장에서는 컴퓨터가 비트를 사용하는 조합논리에 대해 알아봤다. 조합 논리를 이용해서 현재 상태들을 이용해 결과를 도출해낼 수 있었다. 그런 조합 논리 표현하는 게이트들이 있었고 게이트들을 모아서 큰 회로를 만들 수 있었다. 그러나 조합 논리만을 이용해서는 1부터 100까지 더하는 합계를 구할 수 없다. 현재 어디까지 합이 구해졌는지 상태를 알 수 없기 때문이다. 컴퓨터는 어떻게 비트를 기억하는지에 대해 이번장에서 다룰 것 같다. 1. 시간 표현과 상태 기억 오실레이터: 인버터의 출력을 입력에 연결하여 출력이 0과 1사이를 진동함. > 좀 더 안정적인 주파수로 진동하는 오실레이터가 있다면 더 정확히 시간을 측정할 수 있다. 클록: 시간을 셀 수 있게 해주는 신호. 오실레이터가 제공. 가장빠른 클록 속.. 2022. 5. 5.
[2] 전자 회로의 조합 논리 컴퓨터는 비트(bit)를 사용한다고 지난 1장에서 배웠다. 여담이지만 지금 이진상회(binary상회..)라는 정말 좋은 카페에 와서 이 글을 쓰고있다. 2장에서는 컴퓨터가 그래서 이 비트를 어떻게, 어떤 논리로 다루는지에 대해 배운다. 지난시간에 NOT, OR, AND, XOR과 같은 불리언 대수에 대해 잠깐 이야기를 했었는데 이번 장에서는 불리언 대수 -> 조합논리에 대해 다룰 것 같다. 1. 아날로그와 디지털 간단하게 아날로그는 연속적인 것, 디지털은 이산적인 것이다. 아날로그로 표현하는 것이 모든 실수를 표현할 수 있기 때문에 좋아보이지만 반면 아날로그는 정확한 표현을 하기에 어렵다. 자에서 정확하게 1.01을 찾는 것이 어려운 것 처럼. 물론 자가 매우 커진다면 1.01을 찾는 것은 쉬울 수 있다.. 2022. 5. 1.
[1] 컴퓨터 내부의 언어 체계 컴퓨터는 비트(bit)를 사용한다. 이는 2진법을 사용한다는 바이너리(binary)와 숫자를 의미하는 디지트(digit)가 합쳐진 말이라고한다. 비트를 이용한 표현에는 논리 연산, 정수 표현, 실수 표현.. 부터 색을 표현하는 방법까지 다양하다. 어떻게 0과 1로 이 모든 것을 표현할까? 1. 논리 연산 NOT, OR, AND, XOR과 같은 불리언 대수를 이용해서 "비가온다면 코트를 입는다", "학교에 가는 날이 아니라면 공원을 간다"와 같은 문장들을 다룰 수 있다. 2. 정수의 표현 비트를 이용한 2진수로 값을 표현한다. 비트의 개수가 32개이면 0~4294967295를 표현할 수 있고 비트의 개수가 64개이면 0~18446744073709551615의 범위를 표현할 수 있다. 2진수에서는 가장 오른.. 2022. 4. 5.
한 권으로 읽는 컴퓨터 구조와 프로그래밍 독서 시작 책을 읽기 전 생각 이 책에는 더 나은 소프트웨어 개발을 위한 하드웨어, 자료구조, 필수 알고리즘 등에 관한 내용이 담겨있다고 한다. 임베디드와 관련된 현직으로 들어가기 전에 전반적인 컴퓨터 구조에 관한 지식을 환기하고 싶었고, 컴퓨터구조와 관련된 내용뿐 아니라 프로그래밍과 관련된 전반적인 내용을 다루고 있는 것으로 보여 이 책을 선택하게 되었다. 프로그래밍을 제대로 잘 해야하는 이유 - 앞으로는 컴퓨터가 들어있지 않은 물건을 찾기가 어려운 시대가 올 것이다. - 컴퓨터 프로그래밍은 다방면의 지식을 갖추지 않아도 특정 분야의 전문가가 될 수 있다 -> 보안 취약점 보고서나 제품 리콜등과 같이 소프트웨어 품질에 대한 문제의 원인 프로그래밍 교육 열풍 이 책에서는 이렇게 말한다. "누구나 코딩을 배우는 것은.. 2022. 4. 5.
M1칩 MacOS에 Flutter 설치, Android Studio 설정 0. Android Studio 다운로드 https://developer.android.com/studio?gclid=Cj0KCQiA3fiPBhCCARIsAFQ8QzWuVxJbLgPC6z07sZcZQ10Eu3WOXOA63vD3HcI8upufUEgMnPvuY-oaAnMCEALw_wcB&gclsrc=aw.ds Download Android Studio and SDK tools | Android Developers The official IDE for Android app developers. developer.android.com 1. Flutter 다운로드 https://docs.flutter.dev/get-started/install/macos macOS install How to install on m.. 2022. 2. 6.
iOS 빌드까지의 여정 1. Apple Developer 등록하기 Flutter로 앱 개발을 마쳤는데, 플레이스토어/앱스토어에 올리기는 뭐해서 그냥 친구들한테 테스트 앱 형태로 보내주고싶었다. 그런데 주변에 안드로이드 유저보다 iOS유저가 많은건 기분탓일까? 하는 수 없이 iOS Build를 하려고 했는데... 안된다고 한다. 보니까 Apple은 테스트앱 빌드 ~ 앱스토어 업로드까지 전부 Apple developer에 등록해야 가능했다. 1년에 129,000원. 개객기들.. 걍 올해 미친척하고 플러터 개발에 토이프로젝트를 부어보자 하는 마음으로 13만원^^.. 질러보자. 아래 사이트에 들어간다. https://developer.apple.com/kr/ Apple Developer Apple 플랫폼에서 개발할 절호의 기회입니다 developer.apple.com 들어가면.. 2022. 1. 27.
Flutter_downloader 예제 오류 해결 [nullpointerexception, File.getPath, provider, http...등 ] Flutter에서 파일 다운로드를 구현하려고 flutter_downloader 패키지를 이용하려고 했다. 예제 코드를 돌려보는데 아래처럼 죄다 fail이 떴다. (맨위에는 나중에 해결한 것) java.io.File com.parse.ParsePlugins.getParseDir() 부터해서 Cleartext HTTP traffic to ~~ not permitted, java.lang.String java.io.File.getPath(), java.lang.illegalargumentexception: couldn't find meta-data for provider with authority com.example.filedownloader.flutter_downloader.provider 와 같이 각종 .. 2022. 1. 12.
[Flutter] 플러터 빌드 오류 (해결, 플러터 업데이트/SDK Manager/Xcode 업데이트) warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'Runner' from project 'Runner') warning: Capabilities for Signing & Capabilities may not function correctly because its entitlements use a placeholder team ID. To resolve this, select a development team in the Runner editor. .. 2022. 1. 3.
삼성전자 대학생 인턴 후기 목차 0. 인턴 과정 1. 질의응답 2. 회사생활 3. 인턴 후기 0. 인턴 과정 인턴은 2021년 7월 5일부터 8월 13일까지로 약 한 달 반동안 진행됐으며 코로나로 인해서 첫 2주간은 온라인으로 진행하고 이후 한달동안은 오프라인으로 회사에서 부서배치 받고 인턴 실습을 진행했습니다. 인턴시작 전에 오리엔테이션을 이틀정도 들었는데 삼성에 대한 교육을 들으면서 삼뽕이 차오릅니다. ㅎ 1. 질의응답 저 포함 대부분의 인턴 동기들이 걱정했던 것은 출근 날에 어떤 복장을 입어야하는지, 부서배치받고 만약 방치된다면 어떻게 행동해야하는지 화장실이나 어디 갈 때마다 말씀드리고 나가야하는지 질문을 하는 것이 좋은지 아닌지.. 등등이었습니다. 복장은 비지니스 캐주얼. 첫날이라고 해서 정장을 입을 필요가 없습니다. 편하.. 2022. 1. 2.