문제출처 생각 처음에 완전 복잡하게 생각했다. 상하좌우로 나누어서 각각 시작점, 끝점을 구해서 상, 하는 n크기로, 좌, 우는 m크기로 쪼개고 바뀔 2차원 배열의 전체를 갈아끼우는 방식으로 접근했는데 너무 복잡해지고 코드도 난해해졌다. 한칸씩 밀고 내리기만 하면 되므로 좌상단의 값을 기억해두었다가 왼쪽 열을 위로올리고 아랫 행을 왼쪽으로 당기고 우측 열을 아래로 내리고 마지막으로 최상단 행을 오른쪽으로 미는 식으로 구현하면 해결할 수 있었다. 코드 const makeMatrix = (rows, columns) => { let matrix = [] for (let i = 0; i < rows; i++){ matrix.push([]); } let num = 1; for (let i = 0; i < rows ..
문제출처 생각 장르당 최대 2개의 노래를 answer에 담아서 반환하는 문제 담길 조건은 첫째, 해당 특정 장르의 노래의 재생수가 가장 높은 장르의 노래를 두개 담음 둘째, 해당 장르에서도 먼저 높은 재생수의 노래가 먼저 담김 장르별 최대 두개까지만 담길 수 있음 먼저 최대재생수의 장르를 찾기위해 반복문을 통해 장르별 재생수를 구했고 그 다음 재생수를 기준으로 내림차 정렬했다. 이후, 장르별 재생수가 높은 순서대로 dic를 만들었다. 그러면 재생수가 높은 장르 순대로 반복을 시켜서 해당 장르에 해당하는 노래 index를 참조해 정답배열에 넣으면 된다. 장르별 노래의 최대 카운트가 2이므로 cnt를 두는 조건을 추가 풀이 def solution(genres, plays): answer = [] genre_..
문제출처 생각 input 숫자를 2진수로 변환해서 나온 1의 갯수와 input보다 큰 숫자의 1의갯수랑 같은 숫자를 찾으면 된다. reverse로 안해줘도 됐다. 풀이 코드 # 2진수 변환함수 def dec2bin(n): binary = "" while(n != 0): left = n % 2 n //= 2 binary += str(left) return binary def solution(n): bin_val = list(dec2bin(n)[::-1]) comp = n + 1 n_count = bin_val.count("1") while(list(dec2bin(comp)).count("1") != n_count): comp += 1 return comp
문제출처 생각 주어지는 문자열이 사전의 몇번째에 있는지 리턴하는 문제 총 5개의 알파벳이고 각 글자당 5개의 가짓수가 생김 5^5 =>3125갯수의 사전단어가 생기고 모든 경우를 탐색해야함 dfs로 모든 경우 탐색 풀이 코드 order = 0 def solution(word): answer = 0 dic = {} lst =["A","E","I","O","U"] def dfs (s): global order if len(s) > 5: return dic[s] = order; order += 1 for i in lst: if(len(s+i) > 5): return dfs(s + i) dfs("") return dic[word]
문제 출처 영어 끝말잇기를 하는데 탈락하는 사람의 번호와 그 사람 기준 몇번째 턴에 탈락했는지를 구하는 문제이다. 3명의 사람이 있을 때, 4번째 순서에 탈락했다고 하면 1번은 자기의 2번째에 탈락한 것이므로 [1,2]를 반환하면 된다. 탈락 조건은 끝말잇기의 규칙인 마지막글자와 첫 글자가 다를때와 이미 사용한 단어를 재사용했을 때 탈락처리된다. 나는 현재와 이전을 나눠 맨 앞글자, 그리고 이전 단어의 마지막글자를 비교했고 dic에 등장단어를 추가해 재등장했을 때 탈락되도록 했다. 반환값은 총 두개로 현재 누가 탈락했는지, 그 사람의 몇번째 순서에서 탈락했는지이며 각각 현재 누가 탈락했는지 === 현재 순서에서 인원수를 나눈 나머지 + 1(전체 2명, 현재 5턴째 탈락 === (4 % 2 + 1)== 1..
- Total
- Today
- Yesterday