목록프로그래머스 (108)
연습장
Q. 첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요. 예시 1번 1/2 + 3/4 = 5/4 예시 2번 9/2 + 1/3 = 29/6 이 문제의 해결에는 총 2가지 과정이 필요하다. 1. 분수의 덧셈 2. 기약분수로 표기 1. 분수의 덧셈 분수의 덧셈은 잘 알겠지만 분모를 통일하고 분자를 더하는것인데 간단하게 하자면 분모끼리 곱하면 분모가 통일이 되며 이후 증가된 분자값 끼리 더하면된다. num1 = 분자 num2 = 분모 라고 하면 다음과같이 표시할 수 있다...
Q. 문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요. 주어진 문장을 공백( ' ' ) 기준으로 쪼개면 [ 1 , 2 , 3 ] 구조로 나뉘는데 1번은 첫번째 숫자 num1 2번은 op 기호 문자 3번은 두번째 숫자 num2 가 들어있다 이를 각각 변수에 저장하고 if 문을 이용하여 op가 + , - , * 인 경우에 대해 각각 처리해주었다. function solution(binomial) { binomial = binomial.split(' ') let num1 = parseInt(binomi..
Q. 알파벳으로 이루어진 문자열 myString이 주어집니다. 모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요. 풀이 방법은 2가지 정도 생각이 든다. 1. toUpperCase 이용 2. 유니코드 변환을 통해 생성한 함수 이용 // 2. 유니코드 변환 const UpChar = (char) => { if (char >= 'a') { return String.fromCharCode(char.charCodeAt() - 32) } else { return char } } function solution(myString) { var answer = ''; // 1. toUpperCase // let UpperString = myString.toUpperCase() for..
Q. 정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다. 이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요. 단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다. 주어진 배열의 원소에 대해서 50 이상이면서 짝수이면 2로 나누고 50 미만이면서 홀수이면 2를 곱하고 1 을 더한다. 위의 과정을 모든 원소에 1번씩 적용한것을 arr(1) 이라 하며 더이상 배열의 원소가 ..
Q. 문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다. l 이나오면 왼쪽을 return r 이나오면 오른쪽을 return 없다면 빈 리스트 [] return str_list 를 for 문으로 돌면서 l 이 나오면 그것보다 왼쪽을 slice 해오고 r 이 나오면 그것보다 오른쪽을 sl..
Q. 정수 배열 arr와 query가 주어집니다. query를 순회하면서 다음 작업을 반복합니다. 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다. 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다. 위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요. 생각보다 정답률이 낮은 문제 이유는 문제 해석이 중의적으로 되기 때문이다. query[i] 의 홀 짝 이 아닌 i 자체의 홀 짝 을 판단해서 버릴지 말지 를 구하는 문제이다 올바른 해석은 arr[query[0]] 의 뒤를 버리고 arr[query[1]] 의 앞을 ..
Q. 정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요. 단, arr에 2가 없는 경우 [-1]을 return 합니다. 경우의 수가 여러개라서 생각을 잘해야 풀 수 있다. 1) 2가 없는경우 - 예시의 3번이며 -1 을 retrun 한다. 2) 2가 1개인 경우 - 예시의 2번이며 2 를 return 한다. 3) 2가 2개인 경우 - 예시의 1번이며 2부터 2까지 모두 slice 해서 return 한다. 4) 2가 3개 이상인 경우 - 예시의 4번이며 처음 2 부터 마지막 2까지 모두 slice 해서 return 한다. 각각의 케이스를 하나씩 고려하기 보다는 문제를 잘 정리하면서 공통된것을 찾아서 없애며 푸는..
Q. 정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다. n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지 n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지 n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지 n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로 올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요. n 에 따라서 4가지의 슬라이싱이 진행된다. -> 조건문 a = slicer[0] b = slicer[1] ..
Q. 알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요. result = [ ] 라는 배열안에 0 이 각각 26개씩 (A-Z , a-z) 총 52개 가 존재하는 배열이 있다. 주어진 my_string 에 따라서 A 일 경우 0 번째 인덱스가 1 증가. AAB 일 경우 0번째 인덱스가 2증가 , 1번째 인덱스가 1 증가 이런식으로 카운팅 해주는게 목표이다. 잘..
Q. 문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요. 흔히 말하는 세로 드립 문제이다. 주어진 문자열을 m 만큼씩 끊어서 2차원으로 만들고 c 번째 열의 세로를 읽는 문제이다. 따라서 문자열의 각 행을 배열에 끊어서 저장하고 m=4 인 배열의 경우 각 인덱스는 0번째는 문자열의 0 - 3 까지 1번째는 문자열의 4 - 7 까지 2번째는 문자열의 8 - 11 까지 ... 5번째는 문자열의 16 - 19 까지 각각 새로운 배열 arr1 에 저장하고 arr1 의 원소들에 대해서 각각 c = 2 번째 글자를 가져오게된다. 그 중에서 원하..