Algorithm Problem
[python] 프로그래머스 - 이진 변환 반복하기(월간 코드 챌린지 시즌1)
🤔문제 해결 '0'이 제거된 갯수도 필요하기 때문에 '0'의 개수를 저장 s의 길이에서 0의 개수를 빼주면 '1'로 구성된 s의 길이가 나옴 그 길이를 2진법으로 표현 1-3 반복 💨 아마 월코챌 1번 문제였던거 같다. 💻소스 코드 def solution(s): cnt, removed_zero_cnt = 0, 0 while s != '1': # 1. x의 모든 0을 제거한다. zero_cnt = s.count('0') # 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다. s = bin(len(s) - zero_cnt)[2:] cnt += 1 removed_zero_cnt += zero_cnt return [cnt, removed_zero_cnt] 📕문제 확인 출처: 프로그..
[python] 프로그래머스 - 다단계 칫솔 판매(2021 Dev-Matching: 웹 백엔드 개발자(상반기))
🤔문제 해결 판매원을 키, 추천인과 수익을 밸류로 하는 딕셔너리를 만든다. (enroll, referral) 칫솔을 판매한 사람을 선택하고, 추천인과 수익을 계속 나눈다. 💨 보통 이렇게 하면 마지막 3개의 케이스에서 시간초과가 발생한다. 그 이유는 수익을 더 이상 나눌 수 없는 상태여도 추천인을 따라서 0원의 수익을 나눠 갖는 척을 하기 때문 따라서 더 이상 수익을 나눌 수 없는 상황이 되면 반복문을 멈춰준다. 💻소스 코드 def solution(enroll, referral, seller, amount): answer = [] multistages = {'-': ['', 0]} for e, r in zip(enroll, referral): multistages[e] = [r, 0] for s, a i..
[javascript] 프로그래머스 - 괄호 회전하기(월간 코드 챌린지 시즌2)
🤔문제 해결 괄호 회전 괄호 체크 스택을 이용하여 괄호의 짝이 맞는지 체크 주어진 괄호(회전을 마친 괄호)를 쪼개서 하나씩 가져온다 가져온 괄호가 왼쪽 괄호이면 스택에 넣고 오른쪽 괄호이면 스택의 제일 위에있는 괄호와 비교하여 짝이 맞는지 체크 짝이 맞지 않으면 올바른 괄호가 아니다. 스택이 비어있으면 올바른 괄호가 아니다. 괄호 체크가 끝나고 스택에 남아있는 괄호가 있으면 올바른 괄호가 아니다 💨 오브젝트의 키, 밸류 가져오기: Object.keys(my_object), Object.values(my_object) 💨 배열에 특정 요소 포함 여부: my_list.includes(my_elem) 💻소스 코드 function solution(s) { var answer = 0; var length = s...
[javascript] 프로그래머스 - 거리두기 확인하기(2021 카카오 채용연계형 인턴십)
🤔문제 해결 한 방안의 모든 P에 대하여 차례로 주변을 탐색했다. 약간 BFS 느낌🤔 O를 만나면 계속탐색 P를 만나면 멈춘다. - 거리두기 지켜지지 않음 탐색 중 P에 대하여 거리가 2가 되면 더 이상 그 지점에서는 탐색을 멈춘다. 그러므로 탐색 중 다른 P를 만났다는 말은 거리가 2 이하이기 때문에 탈락 X는 무시 💨 파이썬으로 풀던 느낌으로 풀었다. break를 한번에 걸어주는 방법이 없나... 💻소스 코드 function solution(places) { var answer = []; var length = places[0].length; var dx = [-1, 1, 0, 0] // 상 하 좌 우 var dy = [0, 0, -1, 1] for (var place of places) { var ..
[javascript] 프로그래머스 - 숫자 문자열과 영단어(2021 카카오 채용연계형 인턴쉽)
🤔문제 해결 문자열에서 특정 문자(들)를 찾아 바꾸는 replace 를 사용 대응되는 문자-숫자 오브젝트를 만들고 변수를 치환하고 싶은 문자로 사용하기 위해서 정규 표현식을 이용했다. 💨 💻소스 코드 function solution(s) { var replaceObj = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9, } for (var key in replaceObj) { s = s.replace(new RegExp(key, "g"), replaceObj[key]); // g는 옵션, g를 안넣으면 처음 만나는 문자 1개만 바꾼다. } return parseInt(s); } 📕문제 확인 ..
[javascript] 프로그래머스 - 행렬 테두리 회전하기(2021 Dev-Matching: 웹 백엔드 개발자(상반기))
🤔문제 해결 Array.from 을 이용하여 2차원 행렬 만들기 테두리 가져오기 범위 내에서 테두리만 오른쪽, 아래, 왼쪽, 위로 차례로 이동 이동하면서 값을 리스트에 저장, 2차원 배열의 값을 바꿔준다(회전) 리스트의 가장 작은 값을 answer 에 저장 💨 2차원 배열 만들기 Array.from, 배열의 최소값 구하기 Math.min.apply(null, []); 이것 보다는 Math.min(...[]); 이 좋아보임(일단 가독성) 💻소스 코드 function solution(rows, columns, queries) { var answer = []; // 1씩 증가하는 2차원 행렬 만들기 const arr = Array.from(Array(rows), () => new Array(columns));..