프로그래머스 3-16 TIL

Seunggyu Jung·2023년 3월 16일
0

같은 숫자는 싫어 : 레벨 1


Q. 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

내 풀이

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

해설

  • 1단계. 순서는 상관이 없기에 바로 for (let i =0 ; i <= arr.length -1; i++) 로 반복문 작성
  • 2단계. 현재의 숫자와 다음에 올 숫자가 다를 때, 현재 숫자를 빈 배열에 push함
  • 3단계. 마지막 arr[arr.length - 1] != arr[arr.length]에서 arr[arr.length]undefinded이기 때문에 arr[arr.length - 1]가 깔끔하게 들어감

한 번만 등장하는 문자 : 레벨 0


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


내 풀이

function solution(s) {
    let str = s.split("").sort();
    let answer = ""
    if (str[0] != str[1]){
        answer += str[0];
    } else {
        answer = "";
    }
    for (let i = 1; i <= str.length - 1; i++){
        if (str[i] != str[i - 1]){
            if (str[i] != str[i+1]){
                answer += str[i];
            }
        }
    }
    return answer;
}

해설

  • 1단계. 매개변수가 문자열로 묶여있기 때문에, split("") 으로 쪼개고, sort()로 알파벳 순서대로 나열함
  • 2단계. 이 문제의 경우, 앞뒤의 문자를 비교해서 앞뒤 모두 다른 문자를 출력해야하기에,
    for (let i = 1; i <= str.length - 1; i++){ if (str[i] != str[i - 1]){ if (str[i] != str[i+1]){ answer += str[i]; } } } 로 작성!!
  • 3단계. 이러면 0번째 문자를 검사 할 수 없기때문에 맨 앞에
    if (str[0] != str[1]){ answer += str[0]; } else { answer = ""; } 로 0번째 문자를 검사

마무리

  • 그동안 고민했던 문제들이 슬슬 풀리는 것 같아 기분이 좋았다가....
  • 레벨 0 의 최빈값문제를 보고 다시 한 번 나는 우주의 먼지라는 것을 깨달았다ㅎ
  • 다음 정기 스터디에서 이에 대한 해설을 듣거나, 주말에 배열에 대해 제대로 공부해봐야 할 듯
profile
감동을 주고픈 개발자(준비생)

0개의 댓글