아래 3개의 문제에 대해 문제 풀이를 작성하였습니다.
프로그래머스 - 연습문제 - 하샤드 수
프로그래머스 - 연습문제 - 같은 숫자는 싫어
프로그래머스 - 완전탐색 - 모의고사
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
x
는 1 이상, 10000 이하인 정수입니다.
입력
arr
: 10
arr
: 12
arr
: 11
arr
: 13
출력
true
true
false
false
function solution(x) {
var answer = true;
let number = x;
let divisor = 0;
//n=123 -> ['1','2','3']
console.log(number); // 123
console.log(number + ''); // '123'
console.log(typeof(x + '')); // string
function intTostrarray(number) {
return (number + '').split(''); // (number + '')를 배열에 한 글자씩 나눠 저장
}
let nArray = new Array();
nArray = intTostrarray(number);
console.log(nArray); // ['1', '2', '3']
// 초기값 0부터 시작, parseInt(number) 를 배열 처음부터 순차적으로 더한 값을 리턴
divisor = nArray.reduce((accumulator, number) => accumulator + parseInt(number),0);
answer = number%divisor==0 ? true : false;
console.log(answer);
return answer;
}
자릿수 더하기에 있던 내용을 거의 그대로 가져다 쓰고, 그 방식을 바탕으로 나눗셈을 진행하여 결과를 반환한다.
function solution(n) {
const waterMelon = n =>'수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
var answer = waterMelon(n);
return answer;
}
작성 필요
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
- arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
- arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
- 배열 arr의 크기 : 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
입력
arr
= [1,1,3,3,0,1,1]
, [4,4,4,3,3]
출력
answer
= [1,3,0,1]
, [4,3]
function solution(arr){
var answer = [];
for (let i = 0; i < arr.length; i++){
// arr[i] 값과 arr[i+1] 값이 다른경우는,
// arr[i], arr[i-1] ... 이하 인덱스의 값이 이미 전부 같은 숫자였거나 최초로 나온 수라고 볼 수 있으므로
if (arr[i] !== arr[i+1]){
answer.push(arr[i]); // 그대로 추가
}
}
return answer;
}
전체 배열을 순회하며 중복을 체크할 필요는 없어서, 양옆끼리만 비교한 후, i
번째와 i+1
번째의 배열값 비교에서 다른 경우가 발생하면 answer
배열 끝에 넣어준다.
function getDayName(a,b){
var dayList = ['FRI','SAT','SUN','MON','TUE','WED','THU'];
분석 필요..
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입력
answers
: [1,2,3,4,5]
, [1,3,2,4,2]
출력
return
: [1]
, [1,2,3]
function solution(answers) {
var answer = [];
let oneArray = [1,2,3,4,5];
let twoArray = [2,1,2,3,2,4,2,5];
let threeArray = [3,3,1,1,2,2,4,4,5,5];
let oneScore = 0;
let twoScore = 0;
let threeScore = 0;
// 각 배열끼리 비교하여 일치하는경우 (문제를 맞춘 경우) 각 score값 증가
for (let i=0; i<answers.length; i++){
// answers.length = 문제수, 해당 i 값에 관계없이 배열은
// i%OneArray.length 로 나눈 나머지만큼 반복되므로..
if (oneArray[i%oneArray.length] == answers[i]){
oneScore+=1;
}
if (twoArray[i%twoArray.length] == answers[i]){
twoScore+=1;
}
if (threeArray[i%threeArray.length] == answers[i]){
threeScore+=1;
}
}
// score 값으로 수포자들 순위 정렬
var result = (oneScore > twoScore) ? oneScore : twoScore;
var big_result = (threeScore > result) ? threeScore : result; // 수포자들 중 가장 높은 점수
if (oneScore == big_result){
answer.push(1);
}
if (twoScore == big_result){
answer.push(2);
}
if (threeScore == big_result){
answer.push(3);
}
return answer;
}
시험은 최대 10,000문제로 구성되어있다고 해서, 시험 문제 자체가 10,000문제 인줄 알고 처음엔 최소공배수 관련한 내용을 계속 찾아보았다. 그래서 수포자가 찍는방식 5,8,10의 최소공배수 40을 잡았는데.. 그냥 answers
배열이 문제 수였다. 문제를 제대로 읽자.
function solution(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
작성중 ...