TIL. 알고리즘 문제풀이

seul_velog·2022년 11월 2일
0

TIL_algorithm

목록 보기
10/26

1. 가운데 문자 출력

문제 설명

소문자로 된 단어(문자열)가 입력되면 그 단어의 가운데 문자를 출력하는 프로그램을 작성하세 요. 단 단어의 길이가 짝수일 경우 가운데 2개의 문자를 출력합니다.

입력설명
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.

출력설명
첫 줄에 가운데 문자를 출력합니다.

▣ 입출력 예

inputoutput
studyu
goodoo

풀이

const middleText = (str) => {
  let answer = '';
  if (str.length % 2 === 0) { // 1)
    let a = str.length / 2;
    answer = str[a - 1] + str[a];
  } else {
    answer = str[Math.floor(str.length / 2)];
  }
  return answer;
};

const str1 = 'study';
const str2 = 'good';
console.log(middleText(str1)); // u
console.log(middleText(str2)); // oo
  • 1) 받아온 문자 길이의 나머지 값에 따라서 홀수인지 짝수인지 구분한다.

✍️ solution

  • 📌 +) 다른 풀이
function solution(s) {
  let answer;
  let mid = Math.floor(s.length / 2);
  if (s.length % 2 === 1) answer = s.substring(mid, mid + 1);
  else answer = s.substring(mid - 1, mid + 1);
  
  return answer;
}
console.log(solution('study'));
  • String.prototype.substring()
    : substring() 메소드는 string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환한다.






2. 중복 문자 제거

문제 설명

소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요. 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.

입력설명
첫 줄에 문자열이 입력됩니다.

출력설명
첫 줄에 중복문자가 제거된 문자열을 출력합니다.

▣ 입출력 예

inputoutput
ksekksetkset
asdfasdfghasdfgh

풀이

const RemoveDuplicate = (str) => {
  let answer = '';
  for (let i = 0; i < str.length; i++) {
    if (i === str.indexOf(str[i])) {
      answer += str[i];
    }
  }
  return answer;
};

const str = 'ksekkset';
console.log(RemoveDuplicate(str)); // kset
  • indexOf() 메서드를 활용해서 풀어보았다.
  • 처음엔 for of 문을 활용하려고 했으나 이경우 i(인덱스) 를 어떻게 알아낼 수 있을지 알지 못했다. (구글링을 통해 arr.keys()를 이용, 인덱스를 알아낼 방법을 찾았으나 이 문제에서는 적합하지 않을 수 있다고 생각되었다!🧐)
    ✍️ For in과 For of

✍️ solution

solution;
function solution(s) {
  let answer = '';
  for (let i = 0; i < s.length; i++) {
    if (s.indexOf(s[i]) === i) answer += s[i];
  }
  return answer;
}
console.log(solution('ksekkset'));






3. 중복 단어 제거

문제 설명

N개의 문자열이 입력되면 중복된 문자열은 제거하고 출력하는 프로그램을
작성하세요. 출력하는 문자열은 원래의 입력순서를 유지합니다.

입력설명
첫 줄에 자연수 N이 주어진다.(3<=N<=30) 두 번째 줄부터 N개의 문자열이
주어진다. 문자열의 길이는 100을 넘지 않습니다.

출력설명
첫 줄부터 중복이 제거된 문자열을 차례로 출력한다.

▣ 입출력 예

inputoutput
5 good time good time studentgood time student

풀이

const removeDuplicate = (str) => {
  let answer = [];
  for (let i = 0; i < str.length; i++) {
    if (answer.indexOf(str[i]) === -1) {
      answer.push(str[i]);
    }
  }
  return answer;
};
const str = ['good', 'time', 'good', 'time', 'student'];
console.log(removeDuplicate(str)); // ['good', 'time', 'student']
  • 빈배열에 indexOf() 를 활용, 중복되지 않은 단어만을 추가해주었다.

✍️ solution

function solution(s) {
  let answer;
  //console.log(s.indexOf("student"));
  answer = s.filter((v, i) => {
    //console.log(v, i);
    if (s.indexOf(v) === i) return v;
  });

  return answer;
}
let str = ['good', 'time', 'good', 'time', 'student'];
console.log(solution(str));
  • filter()indexOf() 메서드를 활용한 풀이방법이다.
  • indexOf() 메서드는 배열에서 주어진 요소의 첫번째 인덱스를 반환한다는 특징을 활용!😀






4. 큰 수 출력하기

문제 설명

N(1<=N<=100)개의 정수를 입력받아, 자신의 바로 앞 수보다 큰 수만 출력하는 프로그램을 작 성하세요.(첫 번째 수는 무조건 출력한다)

입력설명
첫 줄에 자연수 N이 주어지고, 그 다음 줄에 N개의 정수가 입력된다.

출력설명
자신의 바로 앞 수보다 큰 수만 한 줄로 출력한다.

▣ 입출력 예

inputoutput
6 / 7 3 9 5 6 127 9 6 12
2, 8, 3, 9, 4, 5, 12 8 9 5

풀이

const bigNum = (arr) => {
  let answer = [arr[0]];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < arr[i + 1]) { // 1)
      answer.push(arr[i + 1]);
    }
  }
  return answer;
};

const arr = [7, 3, 9, 5, 6, 12];
console.log(bigNum(arr)); // [7, 9, 6, 12]
  • 1) 주어진 배열에서 제일 처음의 값은 미리 먼저 넣어주고, arr[i]arr[i+1] 의 값을 비교했다.

✍️ solution

function solution(arr) {
  let answer = [];
  answer.push(arr[0]);
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > arr[i - 1]) answer.push(arr[i]);
  }
  return answer;
}

let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(arr));
profile
기억보단 기록을 ✨

0개의 댓글