문제설명 △△ 게임대회가 개최되었다고 한다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행된다.N명의 참가자가 1번부터 N번까지 차례대로 배정 받고, 1번2번, 3번4번, ... , N-1번N번의 참가자가 대진을 하는 방식으로 진행된다. 각 게임에서 이긴 사람은 다음 라운드에 진출하고 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받는다. 1,2번의 대진에서 이긴 사람이 다음 차례 1번을 부여받는 방식이다. 게임은 최종 한 명이 남을 때까지 진행된다.게임을 진행하는 동안 처음 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 알고 싶다고 할 때, 몇 번째에 만나는지 구해 리턴을 하면 되는 문제이다.더보기 ※제한사항 -A번 참가자와 B번 참가자는 ..
전체 글
문제설명 카카오톡 오픈채팅방이 있다. 이 채팅방에서는 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 이 채팅방에 입장한다면 "[닉네임]님이 들어왔습니다."가 출력된다. 반대로 채팅방을 나가면 "[닉네임]님이 나갔습니다."가 출력된다. 이 채팅방에서는 닉네임을 변경할 수 있는 기능이 있는데 채팅방을 나간 후 새로운 닉네임으로 다시 들어가는 경우와 채팅방에서 닉네임을 변경하는 경우가 있다. 이 경우 기존 출력된 메시지가 변경한 닉네임을 기준으로 변경된다. 최종적으로 마지막으로 활동한 사람까지의 메시지를 반환하면 되는 문제이다. 더보기 ※제한사항 - record는 문자열이 담긴 배열이며, 1 이상 100,000 이하이다. - 모든 유저는 [유저 아이디]로 구분한다. - 첫 단어는 En..
문제설명 총 n명의 사람이 영어 끝말잇기를 하고 있다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어을 말하고 마지막 사람이 단어를 말한 다음에는 다시 1번부터 반복하는 식으로 진행된다. 앞사람이 단어를 말하면 그 다음 순서의 사람은 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야하며 이전에 등장했던 던어는 사용할 수 없고 한 글자인 단어도 인정되지 않는다. 게임을 진행하고 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 며 번째 차례에 탈락하는지를 구하면 되는 문제이다. 더보기 ※제한사항 - n은 2 이상 10 이하의 자연수이다. - 배열로 주어진 words는 n 이상 100 이하이다. - 단어의 길이는 2 이상 50 이하이다. - 모든 단어는 알파벳 소문자로만 이루어져 있다. - 정답..
문제 설명 퍼즐 게임으로 유명한 하노이의 탑은 원판을 마지막 기둥으로 모두 옮기면 끝나는 게임이다. 규칙 크게 두가지가 있다. 첫 번째는 한 번에 하나의 원판만 옮길 수 있다이고, 두 번째는 큰 원판이 작은 원판 위에 있어서는 안된다는 규칙이다. 위에 규칙을 준수하면서 첫 번째 기둥에 있는 모든 원판을 세 번째 기둥으로 최소한의 이동으로 옮겨주면 된다. 더보기 ※ 제한사항 : 원판의 개수는 15이하의 자연수이다. 풀이 문제에서는 원판의 개수를 가르키는 변수 n(int)이 주어진다. n의 개수가 정해져 있지 않기 때문에 단순 반복으로 접근하기에는 무리가 있다고 생각을 하였다. 그래서 재귀를 이용해 접근하였다. 처음 hanoi(n, 1, 3, 2, answer) 이러한 함수 형태로 요청을 하면 hanoi(n..
문제 설명 주어진 두 변수 left(int)부터 right(int)까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 홀수인 수는 뺀 다음 결과값을 반환해주는 문제이다. 풀이 간단하게 해결할 수 있는 문제이다. left부터 right까지 반복을 돌리면서 나머지가 0인걸 찾아 누적시켜준 다음 홀수 짝수를 판단하여 더하거나 빼주면 된다. 아래는 풀이에 사용한 코드이다. function solution(left, right) { var answer = 0; // 결과값에 사용할 변수 let num = 0; // 약수의 개수를 판별할 때 사용할 변수 // 범위 내에서 약수의 개수를 판별하고 결과값에 반영하는 부분 for(let i = left; i
오류 내용얼마 전에 우분투 환경에서 작업을 하다가 포트를 개방해야할 일이 있어 우분투에서 방화벽을 구성하는 UFW를 사용하여 포트를 개방해주었다. 그런데 방화벽 설정을 마친 후 세션을 종료했다가 다시 접속하려고 하니 계속 연결 거부가 발생하여 접속을 못하는 상황에 놓였다. 원인원인은 포트를 개방할때 사용한 ufw에 있었다. aws같은 클라우드 서비스를 이용하는 사용자라면 보통 ssh로 접속을 할텐데 ufw는 우분투 방화벽 설정으로 클라우드 서비스에서 설정하는 방화벽 설정과는 별개의 설정이다. 인스턴스에서는 보통 아래와 같은 명령어로 ufw 활성화를 해준다.$ sudo ufw enable 근데 이 명령어를 실행하면 경고문이 뜨면서 ufw를 허용할거냐고 물어보는데 이게 문제였다. 나는 그냥 방화벽을 사용할..
문제 설명 주어진 문제에 따르면 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 하는데 다양한 모양의 크기의 명함들을 모두 수납할 수 있는 지갑을 만들기 위해 명함의 가로, 세로 크기를 값으로 가지고 있는 이차원 배열 size(int[][])에 대해 주어진 짝에 대해 가장 작은 직사각형을 만들 수 있는 경우에 수를 찾아 반환하는 문제이다. 더보기 ※ 제한 사항으로는 size의 길이는 1 이상 10,000 이하 / 가로, 세로 크기는 1 이상 1,000 이하인 자연수여야 한다. 풀이 문제에서 주어진 변수 size(int[][])에는 가로, 세로 크기가 한 쌍으로 여러 개의 값이 담겨있다. 모든 명함이 들어가는 가장 작은 직사각형을 만들어야 하기 때문에 가로, 세로 크기를 합해서 최댓값을 찾은 다음 최댓..
문제 설명 사과 상자를 가장 최적화해서 포장하는 문제이다. k,m,score[] 변수가 주어지며, 1~k점까지의 점수가 있을 때, k점이 최상품, 1점이 최하품, 한 상자에 m개씩 담아 포장했을 때 얻을 수 있는 최대 이익(최저 사과 점수 * 한 상자에 담긴 사과 개수 * 상자의 개수)를 반환해주면 된다. 풀이 문제에서 변수로 주어지는 score[]에는 각각 점수로 표현된 사과가 담겨 있다. 최대 이익을 실현하려면 가장 높은 점수가 담긴 사과들부터 모아주면 된다. 그러기 위해 score을 내림차준으로 정렬하고 가능한 많은 상자로 쪼개어 result 변수에 저장한 다음 문제에서 주어진 최대 이익을 계산한 값을 answer라는 변수에 담아주어 반환하는 방식으로 코드를 작성하였다. 아래는 풀이에 사용한 코드이..
문제 설명 프로그래머스 lv.01 문제로 배열 형태로 제공된 데이터에서 '#'(문제 설명으론 폴더)로 표시된 부분들을 드래그 한번으로 모두 포함하는 최단거리를 구하는 문제이다. 풀이 모든 '#'을 포함 시켜야 한다고 문제 설명에 되어 있다. 이 말은 드래그를 하면 모든 '#'이 포함되어야 하기 때문에 결과는 무조건 직사각형 형태로 나올수 밖에 없다. 직사각형 형태로 나온다는 건 가장 왼쪽 윗부분과 가장 오른쪽 아랫부분의 좌표값이 문제에서 요구하는 결과물이라는 말과 같다. 즉, '#'이 있는 x,y좌표의 최댓값, 최솟값만 구해주면 쉽게 문제를 해결할 수 있다. 결과물은 아래 코드와 같다. function solution(wallpaper) { var answer = []; // 결과 좌표값을 담는 변수 l..

이전 포스트이전 포스트에서는 인스턴스를 생성하고 작성한 프로젝트를 가져와 인스턴스에서 정상적으로 실행되는지 테스트 해보는 과정을 가졌다. 이번 포스트에서는 nginx+gunicorn+flask+docker-compose를 활용하여 배포를 진행해보고자 한다. 전체 디렉토리 구조├── README.md ├── .dockerignore ├── .gitignore ├── .gitmodules ├── pacage-lock.json ├── docker-compose.yml │ ├── .github/workflows │ └── main.yml│ ├── .nginx │ ├── Dockerfile │ ├── default.conf │ └── nginx.conf │ └── src │ ├── Doc..