programmers 13

[Programmers] JavaScript, 완전 탐색, 모의고사 문제

문제 1, 2, 3번 학생이 있다. 매개변수로 정답지가 배열로 주어지고, 각 학생은 나름의 찍는 패턴을 갖고 있다. 이때 가장 많이 맞춘 학생들을 오름차순으로 반환한다. programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 코드 풀이 첫 번째 함수 solution(answers)는 padEnd로 시작했다. 신규 아이디 추천 문제에서 padEnd를 처음 알게 돼서 연습 겸 사용해봤다. 우선 각 학생들의 찍는 패턴을 students 변수에 담는다. map을 돌며 매개변수로 주어진 answer의 length만큼, student라는 각 학생들의 찍는 패턴을 반복해서 넣어주었다. 만일 문제가 8문제라 하면 1..

[Programmers] JavaScript, 3진법 뒤집기 (toString(), parseInt(), reduce())

programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 문제 자연수 n이 주어질 때, n을 3진법으로 바꾸고, 이를 앞뒤로 뒤집는다. 이를 다시 10진법으로 변환한다. 코드 풀이 10진법을 2진법으로 바꾸는 로직과 동일하다. 2로 나눈 나머지 대신 3으로 나눈 나머지를 num에 담는 식이다. n이 3보다 작은 경우를 고려해 num += n을 잊지 말고 추가해준다. 10진법을 3진법으로만 바꾸는 데 그치지 않고 이를 뒤집기 때문에 위 같은 코드를 썼다. parseInt()는 문자열 인자를 구문분석해 특정 진수의 정수를 반환한다. 인자가 문자열이 아니라면 문자열로 변환한다. 뒤집힌 3진법은 문자열이고, 이..

[Programmers] JavaScript, 탐욕법, 체육복 문제 (Destructuring Assignment/fill)

programmers.co.kr/learn/courses/ 프로그래밍 강의 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 탐욕법 알고리즘 개요 탐욕법 알고리즘을 활용하는 문제. 탐욕법(Greedy Algorithm)은 동적 프로그래밍(또는 동적 계획법, Dynmaic Programming) 사용 시 지나치게 많은 일을 한다는 것에서 고안된 알고리즘이라고 한다. 두 방법은 서로 차이점이 존재하며, 보완하는 방식으로 활용이 된다고 한다. 동적 계획법은 전체 문제를 여러 개의 하위 문제로 쪼개어 풀고, 하위 문제의 해결 방법을 결합해 최종 문제를 해결한다. 피보나치의 수열이 대표적인 예이다. 이런 프로그래밍 방식은 효율을 위해 함수 결과 값을 저장하며 최종 결과물을 찾는다. ..

[Programmers] JavaScript에서 문자열 내 p와 y의 개수 구하기

문제 대문자, 소문자가 구분 없이 주어지는 문자열 s에서 p와 y의 개수를 구하고, 개수가 동일하면 true, 아니면 false를 반환한다. 이때 p와 y가 모두 하나도 없다면 항상 true를 반환한다. (개수 비교 시 대소문자 구분 X) programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 코드 풀이 str.match(정규식) 메서드는 일치하는 정규식 문자가 있을 때 이를 배열로 반환한다. 없으면 null을 반환한다. 문제에서 p나 y가 하나도 존재하지 않을 경우엔 항상 true를 반환하므로, 함수의 첫 번째 분기에는 str.match([p|y]/gi) === null 조건으로 분기해준다. 하나라도..

[Programmers] JavaScript에서 시저 암호문 만들기 (charCodeAt, fromCharCode())

programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 알파벳을 일정한 거리만큼 밀어서 새로운 문자를 만드는 시저 암호. 암호화 해야 할 문자열이 주어지고, 밀어야 하는 거리 n이 주어질 때 변환된 시저 암호를 반환하는 문제이다. (단, 공백은 아무리 밀어도 공백이다. 문자열은 알파벳 소문자, 대문자, 공백으로만 이루어져 있다.) 코드 문자열은 iterable한 객체이므로 for of 문법으로 문자 하나 하나를 검사했다. 공백일 경우에는 빈 공백을 반환되어야 할 새로운 문자열인 newStr에 더해주고, continue로 다음 반복문 프로세스를 진행한다. String.prototype.charCodeAt..

[Programmers] 소수 찾기, 에라토스테네스의 체

문제 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 1000000이하의 자연수입니다. 코드 풀이 주어진 숫자가 배열 형태가 아니므로, 첫 번째로 반복문을 등장시켜서 소수를 찾기 위한 숫자 집합을 만들어준다. 1은 자연스럽게 제외가 되니 2부터 시작해 n까지 배열에 넣어준다. 이때 arr[0], arr[1]은 채워지지 않아서 undefined이 될 것이지만, 구하는 것은 소수의 개수이므로 filter 메서드를 통해서 지워나갈 수 있다. 만들어진 배열을 순회하면서 소수가 아닌 수들을 제거해줄 목적으로 0을 넣어준다. i = 2일 때, i번째에 위치..

[Programmers] JavaScript에서 문자열 내림차순으로 정렬하기

문제 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 입출력 예 ZbcdefggfedcbZ 코드 풀이 JavaScript의 sort() 메소드는 문자열의 유니코드 코드 포인트를 따른다. 유니코드에서는 대문자가 소문자보다 크므로, 주어진 문자열에 sort() 메소드를 적용하면 abcdef...ABCD... 순으로 정렬될 것이다. 이를 reverse() 메서드를 이용해 뒤집으면 ZYXW... fedcba 순으로 정렬될 것이다. 대문자가 소문자보다 작은 것으로 간주되므로 reverse() 메서드로 끝이 ..

[Programmers] JavaScript 크레인 인형 뽑기 게임

문제 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자 위쪽에는 크레인이 있고 오른쪽에는 바구니가 존재한다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지한다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올리고, 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓인다. 제한 사항 board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다. board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다. 0은 빈 칸을 나타냅니다. 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다. moves 배열의 크기는 1 이상 ..

[Programmers] JavaScript 실패율 구하기 / 예산 문제

문제 프로그래머스 2019 KAKAO BLIND RECRUITMENT 실패율 문제 실패율은 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수로 정의한다. 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라. 제한 사항 스테이지의 개수 N은 1 이상 500 이하의 자연수이다. stages의 길이는 1 이상 200,000 이하이다. stages에는 1 이상 N + 1 이하의 자연수가 담겨있다. 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다. 단, ..

[Programmers] JavaScript에서 가운데 글자 가져오기 (+Java)

문제 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 입출력의 예 "abcde" -> "c" "qwer" -> "we" 코드 풀이 % 연산자는 나눗셈 연산 후 나머지를 구한다. 2로 나누었을 때 나머지 길이가 0이라면, 주어진 단어의 길이는 짝수이다. 문자열은 읽기 전용 배열처럼 취급되기 때문에, 인덱스를 사용해 특정 위치의 문자를 추출할 수 있다. 이를 위해서 전체 문자열 길이를 2로 나눈 후, Math.floor() 함수를 적용해, 소수점 이하를 버린다. (배열의 인덱스는 항상 정수이다) 삼항 연산자를 써서 문자열 길이가 짝수인 경우에는 구한 인덱스-1 의 위치를 더한 문자열을 출력한다. 문자열을 자르는 대표적인 메소..