전체 288

맥에서 <bits/stdc++.h> 사용하기

알고리즘 문제를 풀이할 때 C++을 이용해서 푸는 경우에 bits/stdc++.h 헤더를 사용하기도 한다. 이것은 gcc 컴파일러에서만 사용할 수 있는 비표준 라이브러리이다. 위 헤더 파일은 대부분의 C++ 헤더 파일이 포함되어 있어 알고리즘 문제를 풀이할 때 헤더 파일을 여러 개 불러와야 하는 수고를 줄일 수 있다. 또한 대부분의 알고리즘 저지 사이트에서 bits/stdc++.h 를 지원하기 때문에 알고리즘 풀이에서는 문제없이 사용이 가능하다. 하지만 bits/stdc++.h 헤더 파일은 gcc 컴파일러에서만 동작한다. 리눅스 PC는 기본 컴파일러가 gcc일 것이다. 없으면 gcc 설치하면 된다. 그렇게 하면 bits/stdc++.h 를 바로 사용할 수 있다. 그러나 맥 에서는 상황이 다르다. gcc ..

Dockerfile 작성하기

Dockerfile 제작하기 도커 파일은 가상 환경을 만들기에 매우 좋은 도구이다. 도커 파일 제작법과 사용법을 간단히 정리해 볼까 한다. FROM : 도커 파일의 기본 이미지를 다운받는다. 이미지 목록은 도커 허브에서 볼 수 있다. 예) FROM node (노드 최신버전의 도커 이미지를 다운) ENV : 가상환경의 환경변수를 설정한다. 리눅스의 export 랑 비슷한 명령어인듯 예) ENV MYNAME=TREE (myname 을 tree 라고 정의) RUN : 가상환경에서 다음의 쉘 명령어를 실행 예) RUN ls -al (쉘에서 ls -al 명령어를 실행하는 것과 같음) WORKDIR : RUN, CMD, ENTRYPOINT 의 작업 폴더를 설정한다. cd 명령어랑 비슷한듯 예) WORKDIR /us..

M1 맥북에어 DFU모드에서 복구하기

이번에 m1 맥북을 초기화 할 일이 있어서 초기화를 진행하게 되었다. 전원 버튼을 길게 누른 다음 나머지 초기화 과정은 설명서대로 진행했다. 하지만 업데이트가 계속 되지 않자, 실수로 화면을 닫아버렸다. 그 결과는? 시동 디스크를 하나도 찾지 못하는 불상사가 발생해 버렸다. 처음 이 일을 당했을 때는 절망적이였지만, 다행히 최후의 수단으로 복구할 수 있는 수단이 존재했다. DFU 모드로 복구하기 인텔 맥북은 USB를 만들어 설치하면 되나, M1 맥북은 약간 다른 복구 방법이 존재했다. DUF 복구는 애플 공식 문서를 참고했다. https://support.apple.com/ko-kr/guide/apple-configurator-2/apdd5f3c75ad/mac Apple Configurator 2로 Ap..

IT 이야기 2021.08.11

vim plugin 설치하고 쉽게 관리하기

vim 플러그인 관리의 중요성 vim 은 터미널에서 실행되는 텍스트 에디터이다. vim의 장점은 알면 알수록 쓰기 쉽다는 것이며, 플러그인으로 확장할 수 있는 기능이 매우 많다. 그래서 이러한 플러그인을 검색하면은 개인 깃허브에 플러그인 파일을 올려두신 분들이 있다. 하지만 플러그인이 많아질수록 이 플러그인을 관리하기가 참 애매하다. 그래서 이러한 플러그인들을 관리하는 기능을 사용하게 된다. js로 예를 들면 npm, yarn 같은 느낌이고 python으로 예를 들면 pypy 같은 느낌이다. vim plugin 설치하기 설치하기 전에 기초 내용을 알아보자. 내가 사용할 플러그인 관리자 : vim-plug (https://github.com/junegunn/vim-plug) GitHub - junegunn..

42서울 1서클 통과 후기

피신때는 절대로 통과하지 못할것 같았던 1 서클을 이번주 월요일에 통과했다. 여러가지 과제를 하면서 느낀 점이 참 많지만, 간추려서 정리해 볼까 한다. 코딩에 대해서 잘 안다고 자만하면 안된다. 42서울의 과제들은 전공자들도 쉽지 않다는 것을 알게 되었다. 예시로 대학교에서 코딩을 배우다 온 사람들도 42시스템에 대해서 적응이 쉽지 않은 경우를 많이 보았다. 나의 경우에도 대학에서 코딩을 배웠고 솔직히 어느정도 자만했던 기억이 있다. 하지만 여기 와서는 모두 내려놓고 처음부터 다시 시작해야 함을 많이 느꼈다. 그래서 메뉴얼 페이지를 많이 읽고, 구글링을 해서 믿을만한 정보를 추리는 작업도 처음으로 하게 되었다. 인터넷의 지식을 내가 직접 확인하고 내 지식으로 만드는 연습을 많이 했다. 꼼꼼하게 확인하지 ..

잡다한 이야기 2021.07.09

[백준] 5430 AC

https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제를 읽어보고 오자. 명령어에 따라서 숫자를 제거하거나 방향을 뒤집는 문제이다. 함수의 길이는 최대 10만개이므로, 실제로 위치를 바꾸게 되면은 속도가 매우 느려지게 된다. 또한, 주어진 데이터를 적절히 파싱해야 한다. 앞뒤 모두 pop 연산을 수행할 수 있는 deque 자료형을 사용하는 것이 좋다. 덱 자료형은 삽입 연산, pop 연산 등에서 준수한 속도를 보여주기 때문이다. 명령어와 조건에 맞게 현재 상태가 역방향인지 순방향인지 판별한다. 또한 파..

C++ deque 자료형 사용법

STL 컨테이너를 최대한 잘 활용해보자. deque 기본 개념 vector와 비슷한 배열 개념이다. vector와 다르게 여러개의 메모리 블록을 하나의 블록처럼 여긴다. 이로 인해 삽입 연산 시에 더욱 빠른 연산이 가능하다. deque 선언 기본 선언 : deque dq; deque 함수 dq[idx] : 해당 원소 참조 dp.push(pop)_front(back)() : 맨 앞이나 맨 뒤에 데이터 삽입 혹은 제거 begin() : 첫번째 원소의 iterator 반환 end() : 마지막 다음 원소의 iterator 반환 insert(a,b) : a에 b를 삽입 후 삽입한 곳의 iter 반환 erase(a) : a(iter) 가 가리키는 원소 제거, 제거 후 앞 뒤 원소 개수 판단하여 적은쪽 원소를 당긴..

[백준] 5397 키로거

https://www.acmicpc.net/problem/5397 5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L의 길이 ≤ 1,000,000) 강산이가 백스페이 www.acmicpc.net 문제를 읽어보고 오자. 커서를 옮기면서 문자열을 삽입 혹은 제거하는 문제이다. 이 문제는 길이가 최대 100만인 만큼, 동작함에 있어서 최소한의 계산만 있어야 한다. 나의 경우에는 중간에 삽입하는 과정 때문에 list 자료형을 사용하기로 했다. 리스트 구조는 내부적으로 링크드 리스트 구조를 가지고 있어서 중간에 삽입하는 구조에 대하여 상당히 유리하다. iterator만 잘 다루면 간단히 풀..

[백준] 1927 최소 힙

문제를 읽어보고 오자. https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 배열에 값을 넣고, 가장 작은 값 부터 pop연산을 하면 된다. 하지만 문제 조건을 보면 최대 10만개의 값이 들어올 수 있으며, 일반적인 배열로 계산하게 되면은 시간 초과가 나게 될 확률이 높다. 여기서 사용해야 할 자료형은 힙 구조 또는 이진 트리 구조를 사용하는 자료구조를 사용하는 것이다. C++에서는 이러한 구조를 priority_queue 로 구..

[백준] 1406 에디터

문제를 읽어보고 오자. https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 이 문제는 스택으로 풀이하는 것과 양방향 링크드 리스트 기반 자료구조로 풀이할수 있다. 나는 스택으로 풀이하는 법은 잘 몰랐기에, 후자로 풀이했다. 문제 설명은 어렵지 않다. 하지만 저 위에 있는 시간 제한의 눈에 잘 보인다. 0.3초면은 비교적 촉박한 시간이다. 그리고 입력받을 명령어의 개수도 최대 50만개로, 많은 편에 속한다. 조건 생각 이러한 제한된 조건에 근거해서 링..