본문 바로가기

Algorithm & World Class

(39)
(알고리즘) 04_bubbleSort bubbleSort 문제 정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다. 버블 정렬(bubble sort)은 여러 정렬 알고리즘(삽입 정렬, 퀵 정렬, 병합 정렬, 기수 정렬 등) 중 가장 기본적인 알고리즘입니다. 버블 정렬 알고리즘은 아래와 같습니다. 첫 번째 요소가 두 번째 요소보다 크면, 두 요소의 위치를 바꿉니다. (swap) 두 번째 요소와 세 번째 요소보다 크면, 두 요소의 위치를 바꿉니다. (swap) 1, 2를 마지막까지 반복합니다. (마지막에서 두 번째 요소와 마지막 요소를 비교) 1~3의 과정을 한 번 거치게 되면, 가장 큰 요소가 배열의 마지막으로 밀려납니다. 1~3의 과정을 첫 요소부터 다시 반복합니다. 5를 통해 두 번째로 큰 요소가 배열의 마지막 바로 ..
(알고리즘) fibonacci, 효율적 알고리즘 구현을 위해 fibonacci 문제 아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 입력 인자 1 : n number 타입의 n (n은 0 이상의 정수) 출력 number 타입을 리턴해야합니다. 주의사항 재귀함수를 이용해 구현해야 합니다. 반복문(for, while) 사용은 금지됩니다. 함수 fibonacci가 반드시 재귀함수일 필요는 없습니다. mine1 - 시간복잡도 O(N) function fibonacci(n) { let n1 = 0; let n2 = 1; let re..
(알고리즘) isOdd isOdd 문제 수를 입력받아 홀수인지 여부를 리턴해야 합니다. 입력 인자 1 : num number 타입의 정수 출력 boolean 타입을 리턴해야 합니다. 주의 사항 함수 isOdd는 재귀함수의 형태로 작성합니다. 반복문(for, while) 사용은 금지됩니다. 나눗셈(/), 나머지(%) 연산자 사용은 금지됩니다. 0은 짝수로 간주합니다. mine function isOdd(num) { if(num < 0) { num = num * - 1; } else if(num === 0) { return false; } else if(num === 1) { return true; } let gap; gap = num - 2; return isOdd(gap); } reference function isOdd(nu..
(좋은 코드의 작성을 위해) studentReports studentReports 문제 학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열을 리턴해야 합니다. 남학생들의 정보는 리턴하는 배열에서 제외합니다. 'grades' 속성값은 평균값(number 타입)으로 바꿉니다. 입력 인자 1 : students 객체를 요소로 갖는 배열 arr[i]는 'name', 'gender' 등의 속성을 갖는 객체 'grades' 속성은 number 타입을 요소로 갖는 배열 'grades' 속성이 빈 배열인 경우는 없다고 가정합니다. 출력 반복문(for, while) 사용은 금지됩니다. 배열을 리턴해야 합니다. 배열로 되어 있는 학생들의 성적을 number 타입의 평균값으로 변형해야 합니다. 주의 사항 'female'는 여학생, 'male'는..
(좋은 코드의 작성을 위해) pipe 문제 함수들을 입력받아 함수들이 입력된 차례대로 결합된 새로운 함수를 리턴해야 합니다. 입력 인자 1 : func1 number 타입을 입력받아 number 타입을 리턴하는 함수 인자 2 : func2 number 타입을 입력받아 number 타입을 리턴하는 함수 인자 N : funcN number 타입을 입력받아 임의의 타입을 리턴하는 함수 출력 함수를 리턴해야 합니다. 리턴되는 함수는 정수를 입력받아 func1, func2, ..., funcN의 순으로 적용합니다. 주의 사항 입력되는 함수들의 수는 1개 이상이라고 가정합니다. 함수가 아닌 입력은 존재하지 않는다고 가정합니다. 입력받은 함수들이 어떤 일을 하는지는 중요하지 않습니다. reference function pipe(...funcs) { re..
프로그래머스 - 스킬체크 LV2. 조이스틱으로 알파벳 이름 완성하기 문제설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아랫쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서가 이동) ▶ - 커서를 오른쪽으로 이동 예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다. - 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다. - 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다. - 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다. 따라서 11번 이동시켜 "JAZ"..
프로그래머스 - 스킬체크 LV2. 짝지어 제거하기 문제설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그 다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짜지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = bbaabb 라면 b aa baa -> bb aa -> aa-> 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000 이하의 자연수 문자열은 모두 소문자로 이루어져 있습니..
TIL 23일 - (프로그래머스 코딩 테스트) - 직사각형 좌표 구하기 작성한 코드를 보면 알겠지만 리팩토링이 필요하다.OTL 리팩토링 : 코드가 동일하게 작동하게 유지시키면서 코드의 가독성과 효율성을 높이는 작업 나는 해결 절차를 너무 따진 나머지 코드의 효율성과 가독성이 너무 낮다. 하드코딩을 한다면 중복이 되는 x좌표와 y좌표를 제외한 나머지 좌표를 각각 구해주면 간단하게 풀리는 문제였다. 하드코딩 한 것을 반복문을 써서 좀 더 간단하게 만들 수 있었고 비트 연산자를 통해서 정말 간결하게 작성할 수도 있다. (본 내용은 아래에서 다루겠다.) 문제 설명 직사각형을 만드는데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어 있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는데 필요한 나머지 한 점의 좌표를..