728x90
반응형

전체 글 155

[TIPS] Linux/macOS 터미널 비밀번호 없애기

⛔️ 주의 이 내용은 기록만을 위해 작성되었으며, 보안상 취약점을 가지기때문에 회사에서는 사용하지 않길 권고합니다. 이 게시물을 따라 작업한 뒤 발생하는 모든 문제에 대한 책임 및 문제발생 시 귀책 사유는 작업자 본인에게 있으며, 이 블로그 및 필자는 어떠한 책임도 없음을 명시합니다. 사용자에게 sudo 권한 부여 및 password 없애기 위 주의사항에도 작성했지만, 이 부분은 충분히 문제가 될 수 있습니다. 특히 귀찮다는 이유로 권한에 비밀번호를 없애는 일은 절대 없길 바랍니다. 저는 Shell script를 작성 중에, root 권한의 작업영역에 파일을 생성하는 일이 필요했습니다. (컨테이너에 올리기 위해) 이를 스크립트 레벨에서 해결해야 했는데, 쉘 스크립트에 비밀번호를 노출하는 일 없이 진행하길..

TIPS 2023.04.11

[TIPS] gvm으로 Golang 버전 관리하기: go 설치, GOPATH 설정

Go가 처음 나왔을 때부터 이목을 끌던 귀여운 캐릭터 친구.... 멍청해보여서 더 귀엽당ㅋㅋ GVM: Go Version Manager GVM은 NVM 처럼 언어의 버전을 관리하는 매니저다. 당연히 공식지원이 아니라 오픈소스이다. 공식 Github: https://github.com/moovweb/gvm GitHub - moovweb/gvm: Go Version Manager Go Version Manager. Contribute to moovweb/gvm development by creating an account on GitHub. github.com 다음의 명령어를 통해 gvm을 설치할 수 있다. 그러나! gvm을 설치하려면 go가 설치돼있어야 한다. ㅋㅋㅋㅋㅋㅋㅋ 엄청난 역설... golang ..

TIPS 2023.04.07

프로그래머스 - Level 1. 공원 산책 / golang (go) / javascript (js)

문제설명 문제분석 이 문제는 특정 조건에서는 현재 위치를 벗어나지 않고, 그 외에는 산책로를 이동하며 위치를 변경하는 문제입니다. 특정 조건은 다음과 같습니다. 주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다. 주어진 방향으로 이동 중 장애물을 만나는지 확인합니다. 이 문제를 풀면서 조금 난감했던 지점이 있었는데, 코드와 함께 설명토록 하겠습니다. 이해하기 쉽게 코드작성하기 import ( "strings" "strconv" "github.com/thoas/go-funk" ) func solution(park []string, routes []string) []int { answer := getPosition(park, "S") for _, route := range routes { way, fe..

프로그래머스 - Level 1. 바탕화면 정리 / JavaScript (js)

문제설명 문제분석 모든 좌표를 순회하며 파일을 찾아 최소 x, 최소 y, 최대 x, 최대 y를 각각 구해 하나의 배열에 담아 리턴하는 문제입니다. 새로 올라온 level 1이기도 하고, 주말이기도 하니 빠르게 코딩해보겠습니다. 이해하기 쉽게 코드작성하기 function solution(wallpaper) { const file = "#"; let offset = { minX: Infinity, minY: Infinity, maxX: -1, maxY: -1 }; for(let row = 0; row < wallpaper.length; row++) { for(let col = 0; col < wallpaper[row].length; col++) { if(wallpaper[row][col] === file) ..

프로그래머스 - Level 1. 대충 만든 자판 / JavaScript (js)

문제설명 문제분석 이 문제는 targets를 순회하며 각 요소(target) 문자열이 keymap을 통해 최소 몇 번만에 만들어지는 지 구하는 문제입니다. 이때 target을 구할 수 없다면 -1을 담으면 됩니다. keymap과 targets 배열의 길이가 100 이하이므로 완전탐색을 이용해 문제를 해결할 수 있습니다. 이해하기 쉽게 코드작성하기 function solution(keymap, targets) { const answer = new Array(targets.length).fill(-1); // targets을 탐색 for(let i = 0; i < targets.length; i++) { const target = targets[i]; let count = 0; // target의 각 문자를..

프로그래머스 - Level 2. 시소 짝꿍 / JavaScript (js)

문제설명 문제분석 시소가 평형을 이루기 위해서는 양쪽의 토크가 같아야 합니다. 먼저 토크를 구하는 공식을 살펴보겠습니다. t = F(N) * r(m) * sinΘ 토크(t)는 회전축으로부터의 거리(r)와 아래로 누르는 힘(F)과 누르는 각도(sinΘ)의 곱입니다. 이 문제에서는 시소에 사람이 탑승하므로 각도를 제외하고, 아래로 누르는 힘을 대신해 몸무게를 사용합니다. 회전축으로부터의 거리는 2m, 3m, 4m 중 하나이고, 반대쪽에도 같은 거리에 사람이 탑승합니다. 따라서 다음과 같은 공식을 구할 수 있습니다. t_1 = N_1 * r_1 = N_2 * r_2 = t_2 먼저 탑승한 사람을 정하고, 먼저 탑승한 사람의 토크를 계산합니다. 그리고 나머지 사람을 순회하며 토크를 구하고 먼저 탑승한 사람의 토..

프로그래머스 - Level 2. 무인도 여행 / JavaScript (js)

문제설명 문제분석 이 문제는 입력 maps의 모든 요소를 순회하면서 상하좌우의 숫자로 이어진 구간의 합을 배열에 담아 리턴하는 문제입니다. bfs, dfs 모두 사용할 수 있지만 dfs를 사용할 경우 스택오버플로우가 날 수 있기때문에 bfs로 접근하도록 하겠습니다. 이해하기 쉽게 코드작성하기 function solution(maps) { const answer = []; const isVisited = new Array(maps.length).fill(0).map((x) => new Array(maps[0].length).fill(false)); const isNotVisitedIsland = (r, c) => isVisited[r][c] === false && maps[r][c] !== 'X' cons..

프로그래머스 - Level 2. 미로 탈출 / JavaScript (js)

문제설명 문제분석 - 수도코드 이 문제는 BFS 알고리즘을 이용하여 최소 시간을 구하는 문제입니다. 시작 지점부터 출구까지의 최소 시간을 구하면 되는데, 이 때 레버를 끌어야 하는 경우를 고려해야 합니다. 우선 문제에서 주어진 문자열 배열 maps를 2차원 배열로 변환하여 저장합니다. 그리고 시작 지점부터 BFS 탐색을 시작합니다. BFS 탐색을 진행하면서, 현재 위치가 레버인 경우는 레버를 당긴 상태와 끄는 상태를 나누어서 큐에 넣어줍니다. 이 때 레버를 당긴 상태에서는 레버 위치에서부터 탐색을 시작하고, 끄는 상태에서는 현재 위치에서부터 탐색을 시작합니다. 이렇게 함으로써 레버를 끄지 않고 출구까지 갈 수 있는 경우와 레버를 끄고 출구까지 갈 수 있는 경우를 모두 고려할 수 있습니다. 마지막으로, B..

프로그래머스 - Level 2. 덧칠하기 / JavaScript (js)

문제설명 문제분석 먼저 단순하게 접근해 모든 벽을 칠할 때 필요한 count를 세아리는 방법으로 접근합니다. function solution(n, m, section) { const wall = Array.from({ length: n + 1}).map((_, i) => section.includes(i) ? false : true); let count = 0; for(let i = 1; i paintedWall) { answer++; paintedWall = wall + m - 1; } } return answer; } section에 포함된 요소는 페인트 칠이 필요한 벽입니다. 따라서 이 벽부터 시작해서 m칸 만큼 칠하고 count를 올립니다. section의 이전요소에서 칠해진 벽을 (현재 벽 + ..

프로그래머스 - Level 2. 숫자 변환하기 / JavaScript (js)

문제설명 문제분석 이 문제는 x에서 출발하여 y까지 도달하는 여정을 BFS 형태로 접근해서 해결하면 됩니다. memoization을 이용해 접근하면 반복된 연산을 줄일 수 있습니다. 이해하기 쉽게 코드작성하기 function solution(x, y, n) { let answer = Infinity; // 최초 방문하는 num과 그 depth const queue = [{ num: x, depth: 0 }]; const visitedNum = { [x]: true }; do { const { num, depth } = queue.shift(); if(num === y) return depth; const nextNums = [num + n, num * 2, num * 3]; // 각 연산에 대해 for(..

728x90
반응형