Home 프로그래머스 알고리즘 문제 - 02
Post
X

프로그래머스 알고리즘 문제 - 02

Level 0


문자열 뒤집기

문제 링크

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.


풀이

  • String.prototype.split()

    split() 메서드는 String 객체를 지정한 구분자를 기준으로 나눈 배열을 반환합니다.

    str.split(separator, limit)

    • separator : 원본 문자열을 끊어야 할 부분
    • limit : separator가 나올때마다 문자열을 끊어 배열에 넣을 갯수 제한
  • Array.prototype.reverse()

    reverse() 메서드는 배열의 순서를 반전합니다.

  • Array.prototype.join()

    join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.

    arr.join([separator])

    • separator : 배열의 각 요소를 구분할 문자열
1
2
3
4
5
6
7
//solution.js

function solution(my_string) {
  var arr = my_string.split("");

  return arr.reverse().join("");
}

옷 가게 할인 받기

문제 링크

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
(소수점 이하를 버린 정수를 return합니다.)


풀이

  • tilde(~) 연산자

    비트연산자로 0과 1을 뒤바꿔줍니다. (NOT 기능)

    1
    2
    3
    
    const a = 5; // 0000000000000101
    console.log(~a); // 1111111111111010
    // -6
    
  • double tilde(~~) 연산자

    tilde를 2번 반복해서 다시 원래의 값으로 돌아옵니다.

    ~ 연산을 진행하면 Math.floor() 메서드를 사용한 것처럼 소수점들이 버려집니다.

    ~~, Math.floor, parseInt 순서로 속도가 빠릅니다.
    하지만 가독성이 좋지 않으니 남용하지말자.

1
2
3
4
5
6
7
8
9
function solution(price) {
  return ~~(price / 100000 >= 5
    ? price * 0.8
    : price / 100000 >= 3
    ? price * 0.9
    : price / 100000 >= 1
    ? price * 0.95
    : price);
}

배열의 유사도

문제 링크

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.


풀이

  • Array.prototype.includes

    배열이 특정 요소를 포함하고 있는지 판별합니다.

    arr.includes(valueToFind[, fromIndex])

    • ValueToFind : 탐색할 요소 (대소문자 구분)
    • fromIndex : 검색을 시작할 인덱스 값
1
2
3
4
5
6
7
8
9
function solution(s1, s2) {
  var answer = 0;

  s1.map((x) => {
    s2.includes(x) && answer++;
  });

  return answer;
}

문자 반복 출력하기

문제 링크

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.


풀이

  • Spread Operator (…)

    반복 가능한(iterable) 객체에 적용할 수 있는 문법입니다.

    배열이나 문자열 등을 풀어서 요소 하나 하나로 전개시킬 수 있습니다.

1
2
3
4
5
6
7
function solution(my_string, n) {
  var answer = my_string;

  answer = [...my_string].map((x) => x.repeat(n));

  return answer.join("");
}

외계행성의 나이

문제 링크

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다.
입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다.
a는 0, b는 1, c는 2, …, j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다.
나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.


풀이

  • String.prototype.charCodeAt()

    charCodeAt() 메서드는 주어진 인덱스에 대한 UTF-16 코드를 나타내는 0부터 65535 사이의 정수를 반환합니다.

    str.charCodeAt(index)

    • index : 0 이상이며 문자열의 길이보다 작은 정수, 문자열에서 변환할 인덱스 값
  • String.prototype.fromCharCode()

    String.fromCharCode() 메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환합니다.

    String.fromCharCode(num1[, …[, numN]])

    • num1, …, numN : UTF-16 코드 유닛인 숫자 뭉치
  • ASCII 아스키코드

    ASCII

1
2
3
4
5
6
7
8
9
function solution(age) {
  var arr = [...age.toString()];

  let answer = arr.map((x) =>
    String.fromCharCode("a".charCodeAt(0) + Number(x))
  );

  return answer.join("");
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.