daily 알고리즘 : 프로그래머스 0 level 12일차

소히·2022년 11월 11일
0

알고리즘Daily

목록 보기
16/22
post-thumbnail

대문자와 소문자


문제

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.

입출력 예

  • 소문자는 대문자로 대문자는 소문자로 바꾼 "ABcDeFGHij"를 return합니다.

풀이

my_string을 전부 대문자로 바꾼 후(answer) 두 문자열을 비교하여 대/소문자로 변환해주었다.

function solution(my_string) {
  let answer = my_string.toUpperCase();
  let result = "";
  for (let i = 0; i < my_string.length; i++) {
    answer[i] === my_string[i]
      ? (result += my_string[i].toLowerCase())
      : (result += my_string[i].toUpperCase());
  }
  return result;
}

암호 해독


문제

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

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

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


제한사항

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

입출력 예

  • "dfjardstddetckdaccccdegk" 의 4번째, 8번째, 12번째, 16번째, 20번째, 24번째 글자를 합친 "attack"을 return합니다.

풀이

function solution(cipher, code) {
  let answer = "";
  for (let i = code - 1; i < cipher.length; i += code) {
    answer += cipher[i];
  }
  return answer;
}


가까운 수


문제

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

입출력 예

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

풀이

만약 [3, 10, 28, 12]이 array로 주어졌을 때 이 배열을 내림차순으로 sort 후
arr 빈 배열에 n을 뺀 값 절대값을 push 해주었다.

가장 가까운 수가 여러개일 경우 더 작은 수를 리턴해야 하므로,
주어진 값과 일치하는 첫번째 인덱스를 반환하는 indexOf 메서드를 사용하여
내림차순으로 sort 해주었던 배열에서 인덱스 값을 찾아 답을 리턴해주었다.

function solution(array, n) {
  let answer = array.sort((a, b) => a - b);
  let arr = [];
  answer.map((el) => arr.push(Math.abs(el - n)));
  return answer[arr.indexOf(Math.min(...arr))];
}

한 번만 등장한 문자


문제

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.


제한사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

풀이

answer 객체에 key값은 s의 알파벳, value는 등장 횟수를 할당해주었다.
그 후 value가 1인 key값을 result에 할당하여 리턴해주었다.

function solution(s) {
  let answer = {};
  let result = "";
  for (let i of s) {
    answer[i] === undefined ? (answer[i] = 1) : answer[i]++;
  }
  for (let i in answer) {
    if (answer[i] === 1) result += i;
  }
  return [...result].sort().join("");
}

삼각형의 완성조건 (2)


문제

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 2입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

입출력 예

  • 가장 긴 변이 6인 경우
    • 될 수 있는 나머지 한 변은 4, 5, 6 로 3개입니다.
  • 나머지 한 변이 가장 긴 변인 경우
    • 될 수 있는 한 변은 7, 8 로 2개입니다.
  • 따라서 3 + 2 = 5를 return합니다.

풀이

function solution(sides) {
  let maxNum = Math.max(...sides);
  let minNum = Math.min(...sides);
  let i = maxNum - minNum;
  let answer = [];
  while (maxNum + minNum - 1 > i) {
    i++;
    answer.push(i);
  }
  return answer.length;
}

0개의 댓글