[프로그래머스 / JavaScript] 암호해독, 최댓값 만들기

JiHyun·2023년 2월 19일
0
post-thumbnail

암호해독

문제설명
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ cipher의 길이 ≤ 1,000
  • 1 ≤ code ≤ cipher의 길이
  • cipher는 소문자와 공백으로만 구성되어 있습니다.
  • 공백도 하나의 문자로 취급합니다.

입출력예

ciphercoderesult
"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 함수를 완성해주세요.

제한사항

  • 10,000 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers 의 길이 ≤ 100

입출력 예

numbersresult
[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]);
}

문제가 '최댓값'을 구하라 했으니 최댓값을 구하는 메서드를 쓰면 되는구나..
분명 잘 아는 메서드인데 왜 문제풀땐 생각나지 않는 것일까..
문제를 잘 푸는 것도 중요하지만 나도 이렇게 메서드를 최대한 활용해서 코드를 짧고 간결하게 구현하는 방법을 배우고싶다. 이렇게 오늘도 이렇게 또 배워간다.

profile
비전공자의 개발일기📝

0개의 댓글