728x90
반응형

Practice for coding test 34

프로그래머스 - Level 1. 개인정보 수집 유효기간 / JavaScript (js)

문제설명 문제분석 파라미터는 순서대로 오늘 날짜, 각 약관별 유효기간, 약관별 사인한 날짜가 전달됩니다. 이 작업은 한 명에 대한 작업이고, 한 명이 사인한 약관에 대해 오늘날짜로 확인하는 작업이 진행됩니다. 문제를 풀기에 앞서, 만약 내가 실무에서 이런 작업을 진행한다고 생각해봤습니다. 아마 나는 매일 한번씩 모든 사용자에 대해 이 함수를 실행하는 대신, 매월이나 매년 또는 사인하는 순간에 큐잉할 거 같습니다. 당연히 개인정보보호법이 강화되어 시행되는 조치인만큼, 처음부터 약관을 파기하는 로직이 필요하진 않았을 것입니다. 따라서 레거시한 데이터를 바탕으로 위 작업이 진행될 것이고, 최초의 1회에 한해서는 모든 사용자를 대상으로 반드시 이 함수를 실행해야한다고 추론할 수 있습니다. 그럼에도 불구하고 시행..

프로그래머스 - Level 2. 모음 사전 / JavaScript (js)

문제설명 문제분석 지금까지 업로드한 코테 문제는 전부 완전 탐색 카테고리에 포함되어 있습니다. 그래서 당연히 이 문제도 완전 탐색일거라 생각했는데... 왠걸요. 이 문제는 일반항을 구할 수 있으면 훨씬 간단하게 풀 수 있는 문제입니다. 먼저 이 문제는 제한 조건이 있고, 일련의 규칙을 갖는다는 게 어렴풋이 느껴집니다. 그럼 뭐 별 수 있나요. 머리로 하든 손으로 하든 규칙을 찾기 위한 노가다 시작입니다. 먼저 가장 작은 경우부터 확인합니다. 맨 마지막(5번째) 자리의 모음의 인덱스가 커지려면 카운트가 1씩 늘어납니다. 그 다음은 4번째 자리의 모음의 인덱스가 커지는 경우입니다. 가장 마지막 자리의 모음 인덱스가 전부 존재하는 경우는 5가지이고, 존재하지 않는 경우 1가지를 더해 총 6가지가 존재합니다. ..

프로그래머스 - Level 2. 전력망을 둘로 나누기 / JavaScript (js)

문제설명 문제분석 각각의 송전탑을 노드라고 생각하면, 각 노드와 간선의 관계를 이루고 있는 기존 n개의 송전탑이 주어집니다. 이때 간선을 하나씩 제거해가면서 분리된 두 개의 그룹에 포함된 노드의 차를 구하고, 구해진 결과 중 최솟값을 리턴하는 문제입니다. 문제가 어려우니 조금 나눠서 적어보겠습니다. 모든 노드는 간선으로 이어져 있다. 각 노드는 최소 1개 이상의 간선이 존재한다. 노드와 노드를 이어주는 간선을 하나 제거하고, 이때 분리된 그룹의 노드 수를 비교한다. 결과값은 비교한 값 중에서 가장 작은 값이어야 한다. 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 이 문제는 여러 방법으로 접근할 수 있습니다. 기본적으로 그래프의 모든 노드를 탐색해야하는 문제인 만큼 ..

프로그래머스 - Level 1. 최소직사각형 / JavaScript (js)

문제설명 - 최소직사각형 문제분석 모든 명함에는 가로길이와 세로길이가 존재하며, 가로 또는 세로의 길이가 각각 가장 긴 명함의 변을 구해 가장 작은 지갑의 면적을 리턴하는 문제이다. 말이 조금 어려운 거 같아서 풀어보자면 다음과 같다. 모든 명함에는 가로길이와 세로길이가 있다. 일반적인 명한은 가로 길이가 더 길지만, 간혹 세로길이가 더 긴 명함도 존재한다. 세로길이가 더 긴 명함을 옆으로 돌려서(세로길이와 가로길이를 스왑해서) 보관할 수 있다. 위 모든 경우를 포함하는 동시에, 입력된 모든 크기의 명함을 보관할 수 있는 가장 작은 지갑을 만들어야 한다. 결과값은 명함의 가장 긴 가로길이 x 가장 긴 세로길이여야 한다. (이때 3번이 이미 적용된 상태여야 한다.) 문제를 단순화 했으니 이해하기 쉽게 코드..

728x90
반응형