구글 검색으로 메소드 찾아서 많이 풀어봤다. 검색하며 메소드 사용법도 익히고 좋았다. 쉽지 않다..
function solution(a, b) {
var answer = '';
let days = ["SUN","MON","TUE","WED","THU","FRI","SAT"]
// 먼저 요일 설정. 이미 주어진 것이므로 배열화 시킴
answer = days[new Date(`2016-${a}-${b}`).getDay()]
// Date() 함수와 getDay() 메소드 이용. ``기호로 변수 a, b 집어 넣음
return answer;
}
고민한 사항 : 왜 첫 케이스에서 -1이 나올까? -> answer=[-1]로 줬기 때문일까? 하지만 이걸 해결하지 못해 결국 답안을 체크했다.
function solution(arr, divisor) {
var answer = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] % divisor === 0) {
answer.push(arr[i])
}
// divisor로 나눴을 때 나머지가 0이면 푸쉬. 이거까진 했다.
}
if(answer.length == 0) {
answer.push(-1);
}
// 단순했다. 그냥 길이가 0이면 -1을 넣어주기만 했음 됐다...
answer.sort((a, b) => a-b)
return answer;
// sort도 한참 고민했는데 그냥 화살표함수 써서 했음 됐다.
}
음양더하기에 array끼리 곱해서 합하는 것 활용하여 바로 풀었음
function solution(a, b) {
var answer = 0;
// answer 초기화
for (let i = 0; i < a.length; i++){
// a, b가 length가 같다는 전제
answer += a[i] * b[i]
// array끼리 곱해서 더하기
}
return answer;
}
function solution(s){
var answer = true;
let countP = 0
let countY = 0
// p, y를 셈하는 변수 설정
let arrayS = s.toLowerCase().split("")
// 대소문자 상관없이 검색되기 위해 소문자로 모두 변경->이후 문자열을 배열로 바꿈
for (let i = 0; i < arrayS.length; i++){
if (arrayS[i] === "p") {
countP += 1
}
if (arrayS[i] === "y") {
countY += 1
}
// p, y를 카운트하면 변수가 올라감
if (countP === countY) {
answer = true
}else{
answer = false
}
// 문제 조건에 맞게 true, false 지정
}
return answer;
}
2시간 넘게 해답이 안 나오고 답답해서 답을 찾아보기로 했다.
문제는 e라는 녀석에 있었다. 그리고 4자리, 6자리 고려 안 했다...
function solution(s) {
if(s.length === 4 || s.length === 6){
return s.split("").every(c => !isNaN(c))
//이유는 자바스크립트에서는 숫자에 e가 붙으면 지수로 인식하여 문자인 경우도 그냥 숫자로 인식해버린다는 것.
// 모든 요소가 number이면 true리턴
} else {
return false;
}
}
function solution(seoul) {
var answer = '';
for(let i = 0; i < seoul.length; i++){
// for문으로 먼저 배열 돌리기
if(seoul[i] === "Kim"){
// "Kim" 서방이면
answer = `김서방은 ${i}에 있다`
// `` 기호 사용해서 답안 만들기. 따로 인덱스 찾을 필요 없다.
}
}
return answer;
}
function solution(n) {
var answer = '';
for (let i = 0; i < n; i++){
if(i % 2 === 0){
answer += "수"
}else{
answer += "박"
}
}
return answer;
}
2시간 넘게 헤매다 결국 답 봤다. 생각보다 되게 단순하고 예전에 봤던 모습이었다.
function solution(participant, completion) {
var answer = '';
let noDup = [participant.filter(x => !completion.includes(x))]
console.log(noDup)
let dup = participant.filter(item => completion.includes(item))
console.log(dup)
let dupResult = dup => dup.filter((item, index) => dup.indexOf(item) !== index)
console.log(dupResult(dup))
if(noDup) {
answer = noDup.join("")
}else{
answer = dupResult(dup).join("")
}
return answer;
}
function solution(participant, completion) {
participant.sort(); //참가자 배열 정렬
completion.sort(); //완주자 배열 정렬
for(var i=0;i<participant.length;i++){
if(participant[i] !== completion[i]){
//인덱스 0부터 순차적으로 두 배열 비교
return participant[i];
//비완주자가 참가자 배열에 나올 경우 출력
}
}
}
그냥 순서만 맞춰서 짝맞추기 하면 됐다...
function solution(s) {
var answer = '';
let newS = [...s]
let temp = []
for (let i = 0; i < newS.length; i++){
if(i % 2 === 0) {
let bigWords = newS[i].toUpperCase()
temp.push(bigWords)
}else{
let smallWords = newS[i].toLowerCase()
temp.push(smallWords)
}
answer = temp.join("")
}
return answer;
}
function solution(s) {
let answer = '';
let words = s.split(' ');
for (let i = 0; i < words.length; i++) {
for(let j = 0; j < words[i].length; j++) {
// 이중 for문까지는 구현한 사항 차이가 있다면
if(j % 2 === 0) {
answer += words[i][j].toUpperCase();
// 인덱스 값으로 해서 바로 answer에 더하는 것이 차이점
} else {
answer += words[i][j].toLowerCase();
}
}
if (i < words.length -1) {
// 여기는 몰랐던 부분. 공백 추가.
//단어 사이의 공백은 words의 길이를 활용한다. try hello world의 길이는 3이므로 1을 빼준 2보다 작을 때 공백을 넣어준다. 결국 2보다 작은 0번째인 try 뒤와 1번째인 hello뒤에 공백이 추가된다.
answer += ' ';
}
}
return answer;
}
python 같은 경우는 sum을 쓰면 금방이지만 js는 좀 다양한 방법을 사용했다.
function solution(n)
{
var answer = 0;
let arrayN = Array.from(String(n), Number)
// 먼저 배열로 변경
answer = arrayN.reduce((a, b) => a+b, 0)
// reduce 메소드를 사용하여 합산
return answer;
}
위의 문제 + python에서 쓰던 reverse() 활용
function solution(n) {
var answer = [];
let arrayN = Array.from(String(n), Number).reverse()
answer = arrayN
return answer;
}
마찬가지로 22번의 응용. 마지막에 number로 array에서 바꾸는거가 좀 헷갈렸다.
function solution(n) {
var answer = 0;
let arrayN = Array.from(String(n), Number).sort(function(a, b)
{return b-a})
// sort와 함수를 활용한 내림차순 배치 방법
answer = Number(arrayN.join(''))
return answer;
}
새로운 개념을 배웠다. isInteger, Math.sqrt
function solution(n) {
var answer = 0;
let newNumber = Math.sqrt(n)
// Math.sqrt로 제곱근 구함
if (Number.isInteger(newNumber)){
// Number.isInteger로 정수 판단
answer = (newNumber+1) * (newNumber+1)
}else{
answer = -1
// 아니면 -1
}
return answer;
}
filter + 화살표 함수 자주 나온다. 눈에 익혀두자
function solution(arr) {
var answer = [];
if(arr.length === 1){
answer = [-1]
// length가 1이면 [-1]로 반환
}else{
let min = arr.reduce((prev, curr) => {return prev > curr ? curr:prev})
// reduce로 최소값 구하기
answer = arr.filter((element)=>element !==min)
//min 빼고 다 필터링해서 가져온다.
}
return answer;
}
파이썬 while문이 떠올라서 다행히 풀었다.
// 스케치 => while문 활용하여 문제 풀이
// if % 2 === 0 -> /2
// if %2 === 1 -> *3 +1
// if 1 -> return 까지의 n번(count += 1)
// n===500 -> return -1
function solution(num) {
var answer = 0;
while (num != 1) {
if(num % 2 === 0) {
num = num / 2
answer += 1
// 각 조건들 하고 answer +=1
if(answer === 500){
answer = -1
// answer이 500이 되면 스톱하고 -1로 전환
break
}
}else if (num % 2 === 1){
num = num * 3 + 1
answer += 1
// 각 조건들 하고 answer +=1
if(answer === 500){
answer = -1
break
}
}else if (num === 1) {
return answer
}
}
return answer;
}
22번 덕에 효과를 봤다.
function solution(x) {
var answer = true;
let arrayX = Array.from(String(x), Number)
// 먼저 array화로 [1, 0] 식으로 만듦
let sumX = arrayX.reduce((a, b) => a+b, 0)
// 이후 합산을 reduce로 함. 22번 자릿수 더하기 참고
if (x % sumX === 0) {
answer = true;
}else{
answer = false
}
// 이후 조건에 맞게 true, false 먹이기
return answer;
}
28번까지 중하 문제 끝.