알고리즘 문제풀기 (5/16, #17~24)

minkyung·2022년 5월 16일
0
post-thumbnail


진희님이랑 여기저기 돌아다니다가 동우님께 여러 가르침을 받았고 ... 그 친절함에 고삐가 풀려서
"그럼 언어도 잘 모르고 알고리즘 처음 시작하는 사람은 아싸리 첨부터 풀이 봐도되나요 ???"
라고 여쭤봤는데 차라리 처음부터 풀이를 보고 이사람이 왜 이렇게 했는지 논리구조를 따라가고 이해하는게 동우님 케이스에는 공부하기 쉬웠다고 하셨다... 근데 처음에는 절대 해설 보면 안되고 진짜 정답 코드만 보고 스스로 공부해야한다고 말씀해주셨음.

수학익힘책 뒷부분에 답지 훔쳐보던 버릇 때문에 풀이 보면 안된다고 생각해서 3일내리 한 문제에 2~3시간 쏟다가 답지+풀이 보고 허탈감+이런걸 내가 어케알아~ 싶은 마음을 가졌었던 나한테 단비같은 조언이었다 ... 그래서 아래부터는 모른다 싶으면 아싸리 답지를 보기 시작한다.

17. 문자열 다루기 기본

난이도: 중하

function solution(s) {
    var answer = true;
    if (s.length !== 4 && s.length !== 6) {
        answer = false; 
    } else {
        const arr = s.split('');
        arr.forEach(el => { 
            isNaN(el) ? (answer = false) : null;
        });
    }
    return answer;
}

다른 답안)
function solution(s) {
  return s.match(/\d/g).length == 4 || s.match(/\d/g).length == 6 ;
}

18. 서울에서 김서방 찾기

난이도: 중하
재엽님 담당이셨어서 발표 때 어떤 방식으로 풀어나가야하는지 듣고 풀었다!

function solution(seoul) {
    var answer = '';
    var loca;
    for (i=0; i<seoul.length; i++)
        {
            loca = seoul.indexOf("Kim")
        }
    answer =`김서방은 ${loca}에 있다`
    return answer;
}


19. 수박수박수박수박수박수?

문제 설명
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건
n은 길이 10,000이하인 자연수입니다.

입출력 예

nreturn
3"수박수"
4"수박수박"

풀이

function solution(n) {
    let result = ""
    for(let i = 1; i<=n; i++){
        if(i % 2 === 0){
            result += "박"
        }else{
            result += "수"
        }
    }
    return result
}

20. 완주하지 못한 선수

문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예

participantcompletionreturn
["leo", "kiki", "eden"]["eden", "kiki"]"leo"
["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"
["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"]"mislav"

풀이

function solution(participant, completion) {
    participant.sort();
    completion.sort();
    for(var i=0;i<participant.length;i++){
        if(participant[i] !== completion[i]){
            return participant[i];
        }
    }
}

21. 이상한 문자 만들기

문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

풀이

function solution(s) {
    var x = s.split(' ');
    var answer = [];    
    for (let i = 0; i < x.length; i++) {
        answer.push(x[i].split('').map((cur, j) => j%2 ? cur.toLowerCase() : cur.toUpperCase()).join(''));
    }
  return answer.join(" ");
}


22. 자릿수 더하기

문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항
N의 범위 : 100,000,000 이하의 자연수

입출력 예

Nanswer
1236
98724

풀이

function solution(n)
{let answer = 0;
 let sum = 0;
 let arr = n.toString()
 for (i=0; i<arr.length; i++)
     {
         sum += Number(arr[i])
     }
 return answer = sum;
}

23. 자연수 뒤집기

문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
n은 10,000,000,000이하인 자연수입니다.

입출력 예

Nanswer
12345[5,4,3,2,1]

풀이

function solution(n) {
  let answer = [];
  arr = n.toString().split('').map(Number); 
  return answer = arr.reverse()
}

문자열을 숫자 배열로 쉽게 바꾸기 (.map(Number))
reverse()메서드는 배열의 순서를 반전합니다.
split()메서드는 String 객체를 지정한 구분자를 이용하여 여러개의 문자열로 나눕니다.
toString()은 문자열을 반환하는 객체의 대표적인 방법입니다. : 모든 객체에는 객체가 텍스트 값으로 표시되거나 객체가 문자열이 예상되는 방식으로 참조될 때 자동으로 호출되는 toString()메서드가 있습니다.


24. 정수 내림차순으로 배치하기

문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

Nreturn
118372873211

풀이

function solution(n) {
    var answer = 0;
    let arr = n.toString().split('');
    return answer = Number(arr.sort(function(a, b)  {return b - a;}).join(''));
}

배열 정렬하기 (오름차순, 내림차순, 문자열, 객체)

profile
프론트엔드 개발자

0개의 댓글