본문 바로가기

분류 전체보기192

[백준] 1920번 - 수 찾기 (실버 4) 문제 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 접근 방식 정렬 후 이진탐색 구현 매개변수로 정렬된 벡터 전달 -> 10% 시간 초과 입출력 속도 개선 -> 10% 시간 초과 정렬된 벡터를 전역 변수로 접근(매개변수로 전달하는 과정에서 시간이 많이 걸릴 수 있다고 함) -> 통과 코드 #include #include #include #include using namespace std; vec.. 2022. 4. 4.
[백준] 1463번 - 1로 만들기 (실버 3) 문제 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 접근 방식 다이나믹 프로그래밍 분류에 있는 문제이므로 점화식을 찾아 DP로 구현 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 위 규칙을 기반으로 점화식을 찾아보자. 가능한 연산과 규칙을 나열해보면 최종적으로 dp[n] = 1 + min(dp[n-1], dp[n/2], dp[n/3]) 이라는 점화식을 찾을 수 있다. 점화식의 의미는 현재 수에 대한 연산 횟수 증가(1) + 가능한 이전 연산 중 최소 값 ( min(...) ) 이다. 코.. 2022. 4. 4.
[백준] 10026번 - 적록색약 (골드 5) 문제 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 접근 방식 기본 Map과 색약 Map을 만들어 BFS로 구역을 나눠줌 틀렸습니다. 코드와 정답 코드 차이 // 틀린 코드 if (map_visit[i][j] == 0) { q.push({i, j}); visit_value++; } // 정답 코드 if (map_visit[i][j] == 0) { q.push({i, j}); map_visit[i][j] = ++visit_value; }.. 2022. 4. 4.
[Docker] Ubuntu:20.04 컨테이너 Django 환경 구축 글 목적 아래 내용은 docker 설치와 이미지를 run한 이후 내부 컨테이너에서 apt-get update하는 부분부터 에러가 발생하여 해결하기 위해 삽질한 과정이다. 환경을 설치하고 Django web 페이지를 띄울 때까지 오류 상황들을 순서대로 적은 글이고 중간에 돌아가는 과정이 있기 때문에 빠른 결론을 원하면 아래 apt-get update 성공 부분부터 읽으면 될 듯 하다. 만약 이 글과 비슷한 상황이라면 순서대로 읽는 것 보단 필요한 부분만 찾아서 시도해보길 바란다. 도커 이미지는 아래 명령어로 run하였고, 컨테이너 이름은 test이다. $ sudo docker run -it --name=test ubuntu:20.04 /bin/bash docker 설치나 사용에 관한 내용은 아래 링크 참조.. 2022. 3. 31.
[Django] 장고 기본 웹서버 띄우기 기본 Django 개발도구 설치 및 설정 Django가 설치된 환경은 Ubuntu 20.04 LTS 이다. python과 pip등 개발에 필요한 도구들을 설치해준다. $ sudo apt-get install python3 pip3 venv vim 설치 후엔 좀 더 편하게 도구들을 사용하기 위해 .bashrc에 alias를 등록해준다. 각 사용자 계정에 위치한 .bashrc 파일을 열어 ll, la 등의 기본 alias 내용이 있는 곳에 같이 입력해주면 된다. 이 과정은 필수는 아니지만 개인적으로 해두면 편해서 만들어 줬다. alias python='python3' alias pip='pip3' alias vi='vim' 입력 후엔 source .bashrc 명령어를 입력해준다. $ source .bash.. 2022. 3. 28.
[Docker] Docker Repository (3) Docker Hub 와 Docker Repository 도커는 깃 허브와 비슷한 구조로 만들어졌다. 사용자들은 여러 명령어를 활용해 Docker를 설치하고 이미지를 내려받아 필요한 환경을 구축한 후 이미지를 다시 빌드하여 허브에 업로드할 수 있고, 업로드된 이미지는 (인터넷이 가능하고 Docker가 설치되었다면) 언제든 다시 내려받아 사용할 수 있게된다. 이런 과정들을 가능하게 하려면 먼저 Docker Hub에 계정을 만들고, 이미지를 배포하고 관리할 Repository를 생성해야 한다. Repository의 이름은 배포할 이미지의 이름과 같아야 한다. (태그는 보통 버전관리를 위해 사용) 아래 링크에서 가입이 가능하다. https://hub.docker.com/ Docker Hub Container I.. 2022. 3. 24.
[Docker] Docker 사용하기 (2) 이전 글 : Ubuntu에 Docker 설치하기 (1) https://hwan001.tistory.com/180 [서버] Ubuntu에 Docker 설치하기 Docker ? 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이 hwan001.tistory.com Docker에서 Ubuntu 20.04 LTS 최신 버전 공식 이미지 내려받기 Docker를 설치하면 도커 허브에 공유된 공식 이미지 또는 개인이 업로드한 이미지와 직접 제작한 이미지 등을 다운로드하여 원하는 환경을 쉽게 구성할 수 있다. 먼저 아래 명령어를 사용하면 도커 허브에 공유되고 있는 이미지 목록을 가져온다. $ s.. 2022. 3. 24.
[서버] ssh 서비스 포트 변경 및 접속 방법 SSH 포트 변경이 필요한 이유 SSH 서비스의 기본 포트는 22번이다. 하지만 인터넷에 서버를 공개하게 되면 네트워크 공간에 떠돌고 있는 수많은 자동 프로그램들이 로그인 시도를 한다. 이때 기본 포트를 사용하면 보안에 취약하기 때문에 포트를 변경해주는 것이 좋다. (물론 nmap 등의 툴을 통해 포트 스캔하면 다 나온다.) 아래 사진은 최근 Django 웹서버 구축을 위해 잠시 열어둔 서버를 누군가 접속 시도한 기록이다. 초 단위로 여러 아이피에서 root로 로그인 시도한 걸 볼 수 있다. 만약 방금 설치한 서버에서 별다른 조치없이 ssh 서비스부터 열었다면, 서버는 순식간에 특정 국가 해커들의 채굴 도구나 C&C 서버 역할을 할 것이다. 로그인 시도 기록을 보려면 아래 명령어를 사용한다. '접속 시도.. 2022. 3. 23.
[Docker] Ubuntu에 Docker 설치하기 Docker 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이너를 구축, 배포, 복사하며 환경의 이전이 자유롭기 때문에 AWS 등 클라우드 서비스에 최적화되었다. 처음엔 리눅스의 LXC 기술(기존의 컨테이너)을 활용하였으나 현재는 자체 개발된 기술 활용한다. 도커는 단일 컨테이너 관리에 적합하게 만들어져 있다. (다수의 컨테이너를 다루려면 쿠버네티스 활용) https://www.docker.com/ Home - Docker A Community like No Other Community is at the heart of what Docker does. From our Docker.. 2022. 3. 22.
[Python] 데코레이터 (@, Decorator) 파이썬의 데코레이터란? 먼저 Decorate는 '장식하다' 라는 의미가 있고, 따라서 직역하면 '장식자'라는 의미가 된다. (구글 번역기에서는 a person who decorates something. 로 정의되어 있다.) 파이썬에서도 원래 뜻과 비슷한 의미로 사용되는데 @ 기호로 표현 할 수 있으며, 클래스나 메소드를 정의할 때 많이 사용되어 진다. 데코레이터는 직접 정의하여 사용하거나 미리 정의된 내용을 가져와 사용이 가능하다. (정의된 데코레이터는 @property, @classmethod, @staticmethod 등이 있다.) 데코레이터를 작성하면 원본 메소드의 내용을 수정하지 않고 여러 기능을 추가할 수 있게 된다. 메소드(함수)의 실행시간 측정 실행과 종료에 로그 기능 추가 ... 메소드 .. 2022. 3. 21.
[면접 질문] IT 직군 기술면접 대비 질문 정리 - 설로인 질문 목록 포스팅 이유 최근에 IT 직군으로 취업을 준비하면서 기술면접에 대한 질문 내용을 찾던 중 설로인이라는 회사에서 공개한 질문 목록을 찾았다. 꽤 넓은 분야에 관련된 좋은 질문들이 있어서 작성했다. 먼저 원본 질문의 링크이다. https://github.com/sirloin-dev/meatplatform/blob/master/job-description/interview-questions.adoc GitHub - sirloin-dev/meatplatform: 설로인의 육류 플랫폼 서비스를 소개합니다! 설로인의 육류 플랫폼 서비스를 소개합니다! Contribute to sirloin-dev/meatplatform development by creating an account on GitHub. github.c.. 2022. 3. 19.
[프로토콜] TCP ** 추가 내용이 있을 경우 지속적으로 업데이트 되는 게시글입니다. TCP ? Transmission Control Protocol RFC 793 RFC 793 - Transmission Control Protocol datatracker.ietf.org 등장 배경 참조 자료 링크 http://wiki.hash.kr/index.php/TCP/IP 2022. 3. 19.
[서버] scp 명령어 사용 목적 Linux -> Linux, Linux -> Windows, Windows -> Linux등 여러 운영체제(서버) 간의 파일 전송 윈도우에서 OpenSSH 설치 확인하기 OpenSSH Client 기능 활성화 확인 1. 윈도우 키 -> 앱 및 기능 검색 후 엔터 -> 선택적 기능 클릭 2. openssh 검색 ** 설치되지 않았을 경우 아래 링크 참조 https://docs.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_install_firstuse OpenSSH 설치 Windows용 OpenSSH 클라이언트 및 서버를 설치합니다. docs.microsoft.com 리눅스에서 SCP 설치 확인하기 scp 설치 확인 : scp 명.. 2022. 3. 19.
[서버] Django 홈 서버 구축하기 개요 Dorker와 Django를 사용하여 Web 서버를 구축한다. 집에 있는 장비를 활용하여 서버를 구축하고 Django 공부한다. 만들어진 Docker 이미지를 AWS에 이식하고 남는 장비는 포맷 후 보관한다. 구성 OS : 우분투 20.04 LTS 도메인 : iptime 공유기 도메인 등록 후 사용 장비 : 남는 노트북 활용 집에서 로컬 웹 서버 구축하기 각 항목들은 아래 링크의 글에 설명되어 있다. Ubuntu 20.04 LTS 설치 및 설정 리눅스 서버 설치 및 설정 : Docker 설치하고 사용하기 도커 설치 : https://hwan001.tistory.com/180 도커 사용 : https://hwan001.tistory.com/184 Django 설치 Django 설치 : https://.. 2022. 3. 17.
[백준] 10773번 - 제로 (실버 4) 1. 문제 https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 2. 접근 방식 Stack 활용 3. 코드 #include #include using namespace std; int main() { int test_case, tmp, sum=0; cin >> test_case; stack stack_zero; for (int i = 0; i > tmp; if (tmp==.. 2022. 3. 15.
[백준] 15829번 - Hashing (브론즈 2) 1. 문제 https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 2. 접근 방식 1차 : 문제에서 알려준 공식대로 구현 -> 50점, 작은 문자열에서는 잘 동작하지만 큰 문자열에서는 시간초과 2차 : 합동식 활용 A * B mod C -> (A mod C) * (B mod C) -> 통과 3. 코드 1차 코드 #include #include typedef unsigned long long ll; using namespace std; int main.. 2022. 3. 15.
[백준] 18111번 - 마인크래프트 (실버 2) 1. 문제 https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 2. 접근 방식 1차 : 전체 블록의 평균(높이)을 구해서 해당 높이까지 블록을 맞춰주는 로직 작성 -> 틀림 2차 : 0~가장 큰 높이의 블록을 기준으로 각 케이스를 계산하여 가장 시간이 빠른 경우 선택 -> 1%에서 틀림 3차 : 위와 동일하지만 블록을 먼저 다 회수하고 설치 진행 -> 시간초과 4차 : 제거할 블록과 쌓을 블록의 개수를 구하고 시간을 나중에 구함 -> 통과 3. .. 2022. 3. 14.
[프로토콜] FTP ** 추가 내용이 있을 경우 지속적으로 업데이트 되는 게시글입니다. FTP ? File Transfer Protocol 약어 TCP/IP 기반의 응용 프로토콜로 서버와 클라이언트 간의 파일 전송을 위해 고안됨 크게 2개의 연결 종류가 있음 (명령 연결, 데이터 전송용 연결) 위키피디아 링크 RFC 114 (1971년 4월) : 최초의 FTP (CNP 기반?) RFC 765 (1980년 6월) : TCP/IP 버전 RFC 765 - File Transfer Protocol specification datatracker.ietf.org RFC 959 (1985년 10월) : 현재 사양의 FTP RFC 959 - File Transfer Protocol datatracker.ietf.org RFC 1579 (.. 2022. 3. 11.
[백준] 1009번 - 분산처리 (브론즈 3) 1. 문제 https://www.acmicpc.net/problem/1009 1009번: 분산처리 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) www.acmicpc.net 2. 접근 방식 mod연산의 성질을 통해 큰 제곱수를 연산하지 않고 mod 값을 알아냄 빠른 모듈로 거듭제곱법을 적용함 3. 코드 #include #include using namespace std; typedef unsigned long long ll; int func_1009_mod(int a, int b) { vector tmp, tmp2; int *x; ll res = 1; while(b!.. 2022. 3. 10.
[WPF] YouTube Player 1. UI/ XML 2. C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;.. 2022. 3. 10.