문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예 입출력 예 1 "sun", "bed", "car"..
컴퓨터는 크게 2가지로 구분할 수 있습니다. 물리적으로 만질 수 있는 하드웨어(키보드, 모니터, 컴퓨터 본체와 본체 안에 있는 CPU, 메모리 등) 물리적으로 존재하지 않는 소프트웨어 그리고, 소프트웨어는 운영체제(Linux, MacOS, Windows 등)와 그 위에 설치되는 프로그램인 응용 프로그램 (Exel, Chrome 등)으로 다시 나눌 수 있습니다. 그리고 운영체제는 커널(Kernel)과 시스템 프로그램으로 구분됩니다. 커널(Kernel)과 시스템 프로그램 커널은 운영체제의 핵심부분으로써 주로 디바이스 관리, 프로세스 관리, 메모리 관리, 시스템 콜 제공 같은 기능을 관리하는 등, 컴퓨터 자원을 관리합니다. 하지만 커널은 항상 컴퓨터 자원들만 바라보고 있어 사용자와 직접적인 상호작용은 하지 않..
Shell이란, 사용자의 명령어를 운영체제가 알아들을 수 있도록 해석하고 커널에게 전달합니다. 그리고 커널은 해석된 명령어를 받아 하드웨어에 직접적으로 명령을 내립니다. shell의 예시로 우리가 cmd에서 명령어를 칠 때를 봅시다. shj@DESKTOP-DS69STB:~$ ls -l 저는 이와 같은 ls -l 이라는 명령어를 쳤습니다. 하지만 해석하지못하면, 하드웨어는 "이게 뭔 말이야"라고 하며 이해하기 힘듭니다. 그래서 Shell이 필요하고 Shell이 "ls -l" 은 "현재 디렉토리에 있는 내용들을 -l 옵션으로 긴 목록 형식으로 출력해주세요"라고 해석해줍니다. 그러면 해석된 명령을 커널에게 전달하고 커널은 하드웨어에게 해석된 명령을 실행하라합니다. Shell의 주요 기능들 사용자와 커널 사이에..
개발을 하다보면 Linux 라는 단어에 대해 수도 없이 들어봤을겁니다. Linux가 운영체제인것 까진 그래도 알겠지만 정확히 뭐고 왜 사용하는지에 대해선 알지 못하기 때문에 이번 포스팅을 통해 Linux가 무엇인지, 왜 사용하는지?에 대해 간단히 알아보고자 합니다. UNIX 리눅스를 알기 전 먼저 리눅스의 조상인 유닉스에 대해 알아야 합니다. 유닉스에 대해 간단하게 알아보자면, 1965년 MIT, AT&T 벨 연구소, General Electric 소속 개발자들이 모여 멀티태스킹(다중작업)을 지원하는 멀틱스(Multics)라는 운영체제를 개발하기 시작했습니다. 하지만 이 당시 멀티태스킹 작업은 너무나도 어려운 작업이였기 때문에 실패했었습니다. 그 이후 프로젝트를 만들던 직원들이 따로 나와 멀틱스 프로젝트..
개발을 하다보면 자연스럽게 사용하게 되는 git과 Github 사실 저는 이 두 개가 같은 건줄알고 Github 줄인 말이 git인줄 알았습니다 ㅋㅋ; 하지만 CS 면접 나오는 대표적인 질문들 중 하나이기에 이번 포스팅으로 차이점을 알아보고자 합니다. 📌 Git ( 깃 ) 이란 ? 로컬 파일의 변경사항을 기록하고 해당 파일에 대한 여러 사용자 간의 작업을 조율하기 위한 분산형 버전 관리 시스템(VCS : Version Control System) 입니다. Git 이 왜 필요한지에 대해 살펴보자면, 우리가 과제를 제출할 때를 봅시다. 처음에 과제를 완성했다하고 이름을 저장했을 때는 "김김씨 과제.pdf"라고 저장할 것입니다. 근데, 다시 확인을 해보니 수정이 필요해 이전 파일이 필요할지도 모르니 복사하여 ..
proxy의 사전적의미를 보면 "대리" 라는 뜻을 가집니다. Client와 Server가 직접 통신할 때, 보안상의 문제를 방지하기 위해서 직접 통신하지 않고 중계자를 거쳐 통신합니다. 이때 중계자는 바로 프록시 ( proxy ) 입니다. Client와 Server 사이에 프록시 서버가 중계를 할 떄, Client는 프록시 서버를 "Server"라고 인식하고, Server는 프록시 서버를 "Client"라고 인식합니다. 프록시 서버는 서버의 위치에 따라 "Forward 프록시"와 "Reverse 프록시" 2가지로 나뉩니다. Forward 프록시 클라이언트 편 ( 사용자들을 대신해 인터넷 연결 ) 클라이언트 대신 프록시 서버가 목적 서버에 통신해주는 구성을 "포워드 프록시"라고 합니다. Forward 프록..