문제설명
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
입출력예
| cipher | code | result |
|---|---|---|
| "dfjardstddetckdaccccdegk" | 4 | "attack" |
| "pfqallllabwaoclk" | 2 | "fallback" |
나의 문제풀이 시도(1)
function solution(cipher, code) {
return Array.from(cipher).map((cip, i) => (i+1) % code === 0 ? cip : cip.slice(i, 1)).join('')
}
먼저 cipher을 배열로 바꾼뒤 반복문을 돌렸다. i번째 +1이 code로 나누어 떨어질때 해당 인덱스 번호의 cipher을 구하려고 했지만 0번째 인덱스도 같이 출력되서 실패..
나의 문제풀이 시도(2)
function solution(cipher, code) {
return Array.from(cipher).map((cip, i) => i !== 0 ? cip[code * i] : cip.slice(i,1)).join('')
}
그래서 시도한 방법이 i가 0이 아닐때 cipher의 code * i번째를 가져오려했으나 이번에는 0번째 인덱스만 가져와서 또 실패..
나의 문제풀이 시도(3)
function solution(cipher, code) {
let answer = []
for(let i = 0; i<cipher.length; i++) {
if((i+1) % code == 0) {
answer.push(cipher[i])
}
}
return answer.join('')
}
마지막으로 가장 익숙한 for문으로 돌아와서 i +1이 code로 나누어 떨어질때 해당 인덱스 번호의 cipher을 새로운 배열로 담고 그 배열을 문자열로 바꿔줘서 성공!!
다른사람의 문제풀이
function solution(cipher, code) {
return cipher.split('').filter((_, index) => (index + 1) % code === 0).join('');
}
filter을 쓰면 되는데 왜 생각을 못했지...code배수의 인덱스번호를 찾기만 하면 되는건데!
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
| numbers | result |
|---|---|
| [1, 2, -3, 4, -5] | 15 |
| [0, -31, 24, 10, 1, 9] | 240 |
| [10, 20, 30, 5, 5, 20, 5] | 600 |
나의 문제풀이
function solution(numbers) {
numbers.sort((a,b) => a-b)
return numbers[0] * numbers[1] > numbers[numbers.length -2] * numbers[numbers.length -1] ? numbers[0] * numbers[1] : numbers[numbers.length -2] * numbers[numbers.length -1]
}
일단 numbers를 정렬해서 음수의 가장 작은수 2개를 곱한 값이랑 양수중 가장 큰 수를 곱한 값을 비교해서 삼항연산자를 사용하여 리턴하도록 하였다. 하지만 코드가 참 길어서 잘 풀었다 하기엔 애매한 상황.. 그래서 다른 사람은 어떻게 풀었는지 확인해보았다.
다른 사람의 문제풀이
function solution(numbers) {
numbers.sort((a, b) => a - b);
return Math.max(numbers[0]*numbers[1], numbers[numbers.length-1]*numbers[numbers.length-2]);
}
문제가 '최댓값'을 구하라 했으니 최댓값을 구하는 메서드를 쓰면 되는구나..
분명 잘 아는 메서드인데 왜 문제풀땐 생각나지 않는 것일까..
문제를 잘 푸는 것도 중요하지만 나도 이렇게 메서드를 최대한 활용해서 코드를 짧고 간결하게 구현하는 방법을 배우고싶다. 이렇게 오늘도 이렇게 또 배워간다.