본문 바로가기

Algorithm/문제풀이

Programmers - 메뉴 리뉴얼 / Javascript function solution(orders, course) { let answer = []; const list = {}; const getCombination = (arr, n) => { const result = []; if(n === 1) return arr.map(e => [e]); arr.forEach((e, idx, origin) => { const rest = origin.slice(idx + 1); const combinations = getCombination(rest, n-1); const attached = combinations.map(combi => [e, ...combi]); result.push(...attached); }); return result; } orders.map.. 더보기
Programmers - 신규 아이디 추천 / Javascript function solution(new_id) { let string = ''; //소문자변환 string = new_id.toLowerCase() //알파벳 소문자, 빼기, 밑줄, 마침표 제외하고 제거 .replace(/[^a-z0-9\.\-\_]/gi,'') //마침표가 2번 이상 연속된 경우 하나의 마침표로 치환 .replace(/\.+/g,'.') //마침표가 처음이나 끝에 위치한다면 제거 .replace(/^\.+|\.+$/g,''); //빈 문자열이라면 'a'를 대입하고 아니라면 15자까지만 자르기 string = string? string.substr(0, 15) : 'a'; //끝에 위치한 마침표 제거 string = string.replace(/\.+$/g,''); //글자수가 2이하인 .. 더보기
Programmers - 문자열 압축 / Javascript function solution(s) { //문자열 길이 1인 경우 if (s.length === 1) return 1; let strings = []; let answer = 0; //첫번째 반복문은 압축할 문자열 길이 1부터 시작 ~ 문자열 길이 / 2 for(let i = 1; i 1? string + cnt + current : string + current; cnt = 1; } } strings.push(string.length); } return Math.min(...strings); } 남는 문자열 처리하는걸 고심하다가 푸는데 오래걸렸다. 겨우 다풀었나 했는데 테스트케이스 5번에서 틀렸다고 나와서 한참 보니까 문자열 길이 1인 경우를 생각안하고 돌림ㅠㅠㅠㅠㅠ 이래서 제한사항도 유심히 읽어보고.. 더보기
Programmers - 크레인 인형뽑기 게임 / Javascript function solution(board, moves) { //인형을 담을 바구니 let bascket = []; let answer = 0; for(let i = 0; i < moves.length; i++) { //moves에 담긴 값은 1부터 시작이고 index는 0부터 시작하므로 -1을 해줌 const move = moves[i] - 1; for(let j = 0; j < board.length; j++) { //열(move)값은 고정이므로 행(j)값을 반복으로 돌면서 인형이 있으면 관련 코드 실행 const doll = board[j][move]; if(doll) { //인형이 있는 자리에 0을 대입하여 인형을 꺼내준다. board[j][move] = 0; //만약 basket이 비어있지 않고.. 더보기
Programmers - 124 나라의 숫자 / Javascript function solution(n) { const array = ['4', '1', '2']; let answer = ''; while(n) { answer = array[n % 3] + answer; n = (n % 3 === 0)? parseInt(n / 3) - 1 : parseInt(n / 3); } return answer; } 3 * n번째의 숫자를 변환하는 과정에서 규칙 찾는데서 오래 걸렸다. 기본적으로 숫자 n을 3으로 나눴을 때 나머지가 1이나 2로 나누어 떨어지면 1, 2가 되고 나머지가 0인 경우에는 4가 된다. 따라서 나머지에 0, 1, 2 index에 맞춰 ['4', '1', '2'] array를 만들어준다. 3 * n번째의 숫자가 아닌 경우에는 숫자 n을 0이 될 때 까지 계속.. 더보기
Programmers - 단어변환 / Javascript function solution(begin, target, words) { //다음으로 바꿀수 있는 단어가 들어간 큐 const que = [begin]; //방문여부 판별 배열 const isVisited = words.map(w => false); //target으로 바꾸는 것이 가능한지 판별 flag let flag = false; //target으로 바꾸는 것이 가능할 때 변환과정 answer; let answer = 0; //isChangeable이라는 함수로 현재 단어와 큐에 집어넣을 그 다음 단어가 changeable한지 판별한다. //changeable한 조건은 단어의 알파벳 중 한자리만 다른 알파벳인 경우 변경 가능 const isChangeable = (begin, target) => .. 더보기
Programmers - 카펫 / Javascript 굳이 값을 변수화 하지 않았다면 코드 라인은 더 짧아질 수 있었을 것 같지만 가독성 면에서는 좋지 않다고 생각해서 변수명을 달아주었다. function solution(brown, yellow) { const area = brown + yellow; const result = []; //yellow가 될 수 있는 너비 * 높이 조합을 찾는다. for(let i = 0; i * i = height이라는 조건이 있기 때문에 큰 수를 너비로, 작은 수를 높이로 본다. const yellowWidth = yellow / i; const yellowHeight = i; //갈색 격자의 너비는 노란격자 너비 + 2 //갈색 격자이 높이는 노란격자 높이 + 2 const brownWidth = yellowWidth .. 더보기
Programmers - 모의고사 / Javascript 전날 아무리 해도 자꾸 테스트 케이스 검증에서 50점만 맞다가 오늘 아침에 일어나서 코드 싹지우고 다시해보니까 통과! 이렇게 간단한 로직인데 어제는 왜 안됐던건지 모르겠다 후 분명 동일한 로직에 코드만 약간 달랐던 것 같은데... 이전 코드를 비교해볼수가 없어서 아쉽긴하지만 어제의 자괴감에서 탈출할 수 있어서 다행이다. function solution(answers) { const scores = [0, 0, 0]; const a = [1, 2, 3, 4, 5]; const b = [2, 1, 2, 3, 2, 4, 2, 5]; const c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5,]; answers.map((answer, i) => { if(a[i % a.length] === answe.. 더보기
Programmers - 이중우선순위 큐 / Javascript function solution(operations) { let que = []; let answer = []; //들어온 연산 순서대로 que에 작업을 해줌 operations.map((o) => { const isInput = o.slice(0, 1) === 'I'; //'I'로 시작하는 명령일 경우 if(isInput) { //들어온 숫자 큐 que.push(o.slice(2)); //오름차순으로 정렬 que.sort((a, b) => a - b); //'D'로 시작하는 명령이면서 que는 빈 que가 아님(빈 큐인 경우에는 연산을 무시하라고 문제에 나와있음) } else if (!isInput && que.length !== 0){ const deleteMax = o.slice(2) === '1'.. 더보기
Programmers - 다리를 지나는 트럭 / Javascript function solution(bridge_length, weight, truck_weights) { //첫번째로 건널 트럭을 truck_weights배열에서 뽑아줌 const firstTruck = truck_weights.shift(); //다리의 길이 - 1만큼 다리 배열을 만들어 준 후, let bridge = new Array(bridge_length - 1).fill(0); //다리배열의 마지막에는 아까 뽑은 트럭을 마지막에 push해줌 bridge.push(firstTruck); //현재 다리의 무게 let bridgeWeight = firstTruck; //시간 let time = 1; //다리의 무게가 0이 되면 모든 트럭이 건넜다고 봄 while(bridgeWeight) { //다리배.. 더보기