22.9.29

커피 내리는 그냥 사람·2022년 9월 29일
0

항해99

목록 보기
20/108

알고리즘 테스트

1. 없는 정수 사이의 합(하)

10분 정도 소요

function solution(arr1){
  let answer=0;
  let originArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  // 0~9까지라고 했으니 오리진 어레이를 하나 만들어준다.
  let newArr = originArr.filter(x => !arr1.includes(x))
  // 오리진 어레이에서 arr1에 없는 값만 필터링한 새로운 어레이를 만들어줍니다.
  for (let i = 0; i < newArr.length; i++){
    answer += newArr[i]
    // 그 값을 for 문을 돌려 더해줍니다.
  }
	return answer;
}
let arr1=[1,3,5,9,2,4,8,0];
console.log(solution(arr1))

다행히 프로그래머스에서 풀었던 영역이 나왔다. 깔끔하게 성공.

2. 같은 단어는 싫어(상)

1시간 정도 소요

function solution(arr, n){
  let temp1 = []
  // 최종 temp1 빈 array를 만들어줍니다.
for (let i = 0; i < arr.length; i++){
  // for 반복문으로 arr를 먼저 풀어줍니다.
  let temp2 = arr => arr.filter((item, index) => arr.indexOf(item) != index)
  // temp2는 arr에서 중복값을 찾아내는 변수입니다. 입력값에서 나온 중복값은 "dog"이므로 dog를 찾아줍니다.
  let findDup = temp2(arr)
  // 찾은 dog값을 findDup이라는 변수에 담습니다.
  if (arr[i] != findDup){
    // 조건문 if를 통해 dog과 다르면 temp1에 담아줍니다.
    temp1.push(arr[i])
  }
}
  let answer = temp1.sort((a, b) => {
    // 이후 담은 temp1값에서 글자의 알파벳 순을 구하는 식을 구합니다. 두 글자씩 비교한다 해서 순서대로 a, b를 sort 하는데
     if(a[n] > b[n]) return 1;
      if(a[n] < b[n]) return -1;
    // a[n]과 b[n]을 서로 비교했을 때 a가 먼저면 1, b가 먼저면 -1을 리턴해줘서 정렬합니다.
      if(a[n] === b[n]){
        // a, b의 값이 같으면 전체적인 a, b를 비교합니다.
          if(a>b) return 1;
          if(a<b) return -1;
          return 0;
        // 완전히 같은 것은 0으로 반환해줍니다.
      }
  });
  
  return answer;
}
let arr=["coke", "water", "glass", "dog", "dog", "yogurt", "vitamin"];
let n=2;
console.log(solution(arr, n))

마찬가지로 프로그래머스에서 푼 내용을 응용했다. 같은 단어를 모두 제거하는 것을 대신해 그걸 제외한 나머지를 임의의 temp1에 담는 방향으로 갔다.

3. 이상한 문자 만들기2(중)

약 2시간 소요

오히려 중 문제가 더 어려웠다. 이건 시험장 나와서 다시 풀어보는 것으로 했다. 해설은 문제에 넣어뒀다.

function solution(s){
  let answer="";
  let words = s.split(' ')
  // words를 공백으로 split해서 단어단위로 쪼개준다.
  let newWords = ""
  // 새로운 단어를 집어넣을 newWords를 만들어준다.
  for (let k=0; k < words.length; k++){
    newWords += words[k]
    // 새 단어 변수에 단어들을 담아서 문자열로 바꿔준다.
    if (k < newWords.length-1){
      newWords += '  '
      // 먼저 띄어쓰기를 2회 해줘서 확실하게 띄어준다. => 왜냐면 띄어쓰기도 포함해야하기 때문이다.
      
  }
    }
    for (let i = 0; i < newWords.length; i++){
      // newWords를 풀어준다.
      if(i % 2 === 0){
        answer += newWords[i].toUpperCase();
        // 짝수번째 앓파벳은 업퍼
      }else{
        answer += newWords[i].toLowerCase();
        // 홀수번째 알파벳은 로워해준다.
      }

    answer = answer.replace(/ +/g," ")

    // 이후 두 칸의 공백을 한 칸으로 변경해준다.

      }
	return answer
}
let s="hang hae ninety nine";
console.log(solution(s))
profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글