목록프로그래머스 (108)
연습장
문제 해석 1. nums 의 길이의 절반만큼 선택을 할 수 있다. 2. 최대한 원소를 다양하게 뽑았을때의 값이 result 풀이 방법. 1. 몇개를 뽑아야하는지? ( N 개) 2. 중복을 제거한 nums 의 새로운 배열의 길이가 (L 일때) 2-1. 길이가 갯수보다 클 경우 -> N 2-2. 길이가 갯수보다 작을 경우 -> L def solution(nums): # 1. 갯수 N = len(nums)/2 # 2. 중복제거 unq_nums = set(nums) L = len(unq_nums) # 2-1, 2-2 비교 if L >= N : return N else: return L
Q. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. arr 로 받은 숫자를 2진수로 바꾼다. 각각의 숫자를 더해 0이면 빈칸-> ' ' 1이상이면 벽 -> '#' 이 된다. ex) 20 , 1 ..
먼저 모든 문제를 다 기록하려고 했으나. 비슷한 느낌의 문제도 많고 단순한 문제도 많아서 풀이는 따로 적지 않고 넘어갔다. 문제의 난이도는 쉬운문제도 있고 어려운 문제도 있었다. 어려운문제는 나만 어려운게 아닌걸 알려주듯 정답률이 낮고 푼 사람이 적었다. 다른 사람 풀이는 조금 어려운게 많았지만 그래도 보고 배울점이 많았다. 아쉬운점은 예제는 맞췄으나 제출시 오류가 날 경우 어떤 반례로 틀렸는지 알려주지 않아서 조금 답답했다. 0단계를 다풀면 배지 ? 도장? 스탬프 를 준다는 소문을 들었다. 그래서 열심히 풀었는데 안줬다. 그래서 찾아보니 정작 정해진 문제는 따로 100문제가 있었다. 그래도 점수는 많이 오른거 같아서 좋다. 현재 상황
Q. 0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요. 단순히 더하게 된다면 '582' + '734' = '582734' 가 되고 Number(a) + Number(b) 로 하면 1316이 나오지면 2번째 예시의 경우에는 계산이 되지않는다. 16 자리가 넘어가게되면 계산이 되지않는 문제가있다. 따라서 다음과 같이 해결하였다. // 16자리 이상 계산시 오류 // 1. 문자열을 뒤집고 // 2. 배열로 만들어서 // 3. 같은 인덱스 끼리 더하고 // 4. 10이상일 경우 다음 인덱스에 1 추가하고 -10 해준다. // 5. 배열을 합치고 // 6. 다시 뒤집는다. // 문자열 뒤집는 함수 const revStr = fu..
문제 자체는 직관적 이해가 되는 문제이다. 하지만 풀려고 하면 어렵다. 바깥 테두리를 하나의 사이클로 보고 반복문을 사용하였다. count = 입력되는 숫자 바깥 while 문 1번의 테두리 -> n (끝좌표) 값과 a (시작좌표) 값이 1번 바뀌게 된다. 안쪽 while 문 4개는 각각 왼쪽으로 이동, 아래로이동, 오른쪽으로이동, 위로이동 을 하게된다. function solution(n) { var answer = []; let count = 1; for (let i =0 ; i
Q. 문제 이해부터 해보자면 1번 예시 빈칸이 안전 지역이라고 생각하면된다. -> 16칸 2번 예시 -> 13칸 3번 예시 -> 0 칸 배열의 크기는 1*1 부터 100*100 까지 이며 지뢰에 대해서 주변이 모두 위험지역이 된다. 1번 예시의 경우로 보면 이렇게 본다면 어떨까? 지뢰와 위험지역을 모두 1로 놓고 전체 지역의 크기 5*5 - (배열안 원소의 합) = 25 - 9 = 16 이 된다. 2번 예시의 경우 25 - 12 = 13 이 된다. 그렇다면 어떻게 지뢰 주변 지역의 원소를 1로 만들 수 있을까 ? 1. 먼저 지뢰가 어디있는지 찾고 2. 지뢰의 좌표보다 -1 , +1인 지역의 좌표를 1로 바꾸면 된다. 위험지역의 값을 바꿀때는 board 의 범위를 벗어나지 않도록 i 와 j 의 값을 잘 통..
Q. 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요. lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다. 문제의 이해를 돕기위해 나머지 예시 케이스도 그려보겠다. 2번째의 경우 점에서 겹치는건 영향을 주지않고 선분이 겹치는게 없으므로 0이 된다. 3번째의 경우 1-9까지 => 8칸 3선분이 겹치는 3-5 구간은 추가로 영향을 주지 않는것을 알 수 있다. 1. 겹치는 구간은 1단위로 계산을 한다. 2..
Q. 점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다. [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] 주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요. 1. 기울기를 구하는 함수를 만든다. 2. 4개의 점 중에서 2개를 선택하여 기울기를 구한다. 3. 나머지 2개의 점의 기울기를 구한다. 4. 두 기울기의 절대값이 같으면 평행이다. 1. 기울기는 기울어진 정도, x 변화량에 따른 y 변화량이다. 식으로 쉽게 표현해보면 우리가 입력받는 값은 2차원 배열인데 각각은 점의 x와 y 좌표가 들어있는 총 4개의 점이라고 볼 수 있다. dots = [..
Q. 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다. 빈도수를 세는 문제는 객체로 만들어서 풀면 이해하기 편하다. 1. 객체로 만든다. 빈 객체 dic 를 만들고 배열 array 의 원소가 dic 에 존재 할 경우 해당 value 값을 1 증가 없을 경우 해당 value 값을 1로 만든다. let array = [1, 2, 3, 3, 3, 4] let dic = {} for (i of array){ if(i in dic){ dic[i] += 1 } else { dic[i] = 1 } } console.log(dic) // { '1'..