문제13
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
나의코드
function solution(a, b) {
var answer = '';
var dayOfWeek = ["THU","FRI","SAT","SUN","MON","TUE","WED"];
var sumDay =[31,29,31,30,31,30,31,31,30,31,30,31];
var sum = 0;
for(var i =0;i<a-1;i++){
sum += sumDay[i];
}
sum += b;
var ans = (sum % 7);
answer = dayOfWeek[ans];
return answer;
}
나의풀이
dayOfWeek에 목,금,토,일,월,화,수를 순차적으로 저장한다. 이 때 목요일부터 배열이 시작하는 이유는 문제에서 1월 1일이 금요일이기 때문에 dayOFWeek[1]을 금요일로 맞추기 위함이다. 2016년은 윤년(2월이 29일)이기 때문에 12달의 일수를 sumDay라는 객체에 저장한다.
for문이 돌아가는 경우를 생각해보자 예를들어 5월 24일의 경우
sumDay의 0부터 4번째 달까지의 sumDay가 모두 더해진 값(즉 1월부터 4월까지의 일수의 합)이 sum에 저장된다
그 후에 sum에 값에 24일을 더해준다
sum을 7로 나눈 값을 ans에 저장해준 뒤 dayOfWeek의 요소를 불러내면 된다.
이떄 조금 고민되었던 부분이 1월 4일과 같이 전체 일수가 7보다 적은 경우였는데, 4를 7로 나눈 나머지의 값도 4이기 때문에 상관없다.
문제14
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.제한사항
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
나의 코드
function solution(arr, divisor) {
let answer = new Array()
for(i=0;i<arr.length;i++){
if(arr[i]%divisor==0){
answer.push(arr[i])
}}
if(answer.length==0){
answer.push(-1)
}
return answer.sort((a,b)=>a-b)}
나의해설
배열의 [i]번째 숫자를 주어진 divisor로 나누고 만약 나누어 떨어진다면 빈 배열인 answer에 arr[i]를 추가한다. 문제의 조건처럼 만약 배열의 길이가 0이면 배열에 -1을 담아 반환하고, 그렇지 않다면 배열을 오름차순으로 정렬한다. 배열을 오름차순으로 정렬하는 방법은 .sort((a,b)=>a-b)이다. 내림차순은 .sort((a,b)=>b-a) 화살표를 처음으로 사용해 보았다.
문제15
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
나의 코드
function solution(a, b) {
let answer=0;
for(i=0;i<a.length;i++){
answer=answer+a[i]*b[i]
}
return answer;
}
나의풀이
문제에서 내적의 공식이 주어져있다. 그대로 입력
문제16
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항
- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
나의 풀이
function solution(s){
var answer = true;
let upperStr=s.toUpperCase()
let Arr1=upperStr.split("")
let filteredP =Arr1.filter(element => element=='P')
let filteredY =Arr1.filter(element => element=='Y')
if(filteredP.length==filteredY.length){
answer=true
}else{
answer=false
}return answer
}
나의풀이
toUpperCase()를 이용해서 들어오는 모든 s를 전부다 대문자로 처리해준다. 그리고 Arr1를 생성하여 위의 대문자 처리된 문자들을 split()를 이용해 하나씩 배열로 넣어준다. filter를 이용해서 각 요소들이 P인 경우와 Y의 경우 각각 filteredP와 filreredY에 들어갈 수 있도록 한 뒤 이 두 배열의 개수가 같으면 true 다르면 false가 되도록 한다
'알고리즘' 카테고리의 다른 글
프로그래머스 자바스크립트 알고리즘 스터디[문25~문28] (0) | 2022.03.14 |
---|---|
프로그래머스 자바스크립트 알고리즘 스터디 [문21~문24] (0) | 2022.03.14 |
프로그래머스 자바스크립트 알고리즘 스터디 [문17~문20] (0) | 2022.03.14 |
프로그래머스 자바스크립트 알고리즘 스터디 [문9~문12] (0) | 2022.03.12 |
프로그래머스 자바스크립트 알고리즘 스터디 [문1~문8] (0) | 2022.03.12 |