프로그래머스 문제풀이 2

zitto·2023년 3월 21일
0

Algorithms

목록 보기
2/22
post-thumbnail

1. 서울에서 김서방 찾기

문제 설명
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

제한 조건
-seoul은 길이 1 이상, 1000 이하인 배열입니다.
-seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
-"Kim"은 반드시 seoul 안에 포함되어 있습니다.

입출력 예
seoul / return
["Jane", "Kim"] "김서방은 1에 있다"

문제풀이

function solution(seoul) {
  let x = 0;
    for(let i=0;i<seoul.length;i++){
        if(seoul[i] === "Kim"){
            x = i;
          return `김서방은 ${i}에 있다`
          //break
        }
    }
    return `김서방은 ${x}에 있다`
}

다른풀이

function solution(seoul) {
    const x = seoul.indexOf("Kim");
    return `김서방은 ${x}에 있다`
}

접근방법
1. 반복문으로 seoul.length하면 인덱스값을 가져올 수 있음.
2. kim의 인덱스(위치)값 찾아서 x에 넣어주기(i로 대체가 가능하다.)
3. kim을 찾았다고 해도 1000번만큼 실행됨.
따라서 break로 종료시켜서 불필요한 반복문 실행을 막도록 한다.
4. 함수 안에서는 return 을 쓰면 함수와 함께 종료시킬 수 있다.

2. 가운데 글자 가져오기

문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.


제한 조건
s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예
s / return
"abcde" "c"
"qwer" "we"

문제풀이

function solution(s) {
    let answer = ""
    const half = Math.floor(s.length / 2)
    answer += s[half];
    if(s.length % 2 === 0){
        //짝수 길이를 가지는 문자열일 때
        answer = s[half - 1] + answer;
    }
    console.log(s,s.length, half, answer);
    return answer;
}

리팩토링

function solution(s) {
    let answer = ""
    const half = Math.floor(s.length / 2) return s.length % 2 === 1
    ? s[half]//홀수 
    : s.substring(half - 1 , half + 1 )//짝수

접근방법
1. 콘솔로 먼저 s를 찍어볼 것
2. 단어의 길이가 홀수인지 짝수인지 판단
3. 전체길이에서 2로 나눈 값을 찾아본다.
4. 인덱스는 정수값으로만 사용됨
5. Math.floor(s.length / 2) 로 2만 소수점 버리기가 가능하다.
6. w에 접근해야한다.
-1을 뻬주면 자신의 인덱스에서 바로 앞의 인덱스에 위치한 값을 가져올 수 있다.
7. 반으로 나눠서 내림처리한 값을 가져오겠다!
짝수의 경우 그 앞에 있는 값을 가져오도록 하기
8. 삼항연산자 사용하기
9. substring 활용해서 문자열 잘라내기
slice사용시 주의할 점
두번째인자에는 +1한 값까지 넣어줘야 한다.
10. ~~ (틸트연산자) 는 Math.floor를 대신하지만 실무에서 잘 사용하지 않는다.

3. 평균 구하기

문제 설명
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.


제한 조건
arr은 길이 1 이상, 100 이하인 배열입니다.
arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

입출력 예
arr / return
[1,2,3,4] 2.5
[5,5] 5

문제풀이

function solution(arr) {
  //평균 구하는 법
  //중간고사 : 점수총합 / 과목개수
    let sum = 0; 
    for(let i=0; i<arr.length;i++){
       sum += arr[i]
    }
  return sum / arr.length;   
}

다른풀이

//reduce 활용(고차함수 형태)
연산된 결과를 출력하고 싶을 때 사용
const arr = [1,2,3,4,5]
arr.reduce((acc,cur)=>{
  console.log(acc,cur)
  return acc + cur
},0) //초기값 지정 가능
//1 2
3 3
15
6 4
10 5
acc는 누적값(앞에 있는 반복문으로 부터 받아옴)
cur은 각각의 현재데이터를 나타냄
//
function solution(arr) {
  //평균 구하는 법
  //중간고사 : 점수총합 / 과목개수
   const sum = arr.reduce((acc,cur)=>{
        return acc + cur
    },0)
    return sum / arr.length;
}    
profile
JUST DO WHATEVER

0개의 댓글