프로그래머스 Lv.0 연습문제 정리 #1 27문제

세나정·2023년 4월 11일
0
post-thumbnail

중첩함수 사용

리턴에 바로 함수값 넣고 그 결과값 내보내고 싶을 땐 function을 사용서 써줘야 리턴을함


문법정리

map, reduce, filter (배열), reverse, replaceAll
  • split(문자열)
    split() : 대괄호씌우기
    split('') : 인덱스 한개씩 괄호에 넣기
    (test.split('') = [...test])
  • join (배열)
    join() -> 컴마로 구분해서 나옴 "h,e,l,l,o"
    join('') -> 구분없이 통으로 "hello"
  • includes (문자열, 배열)
    arr.includes(찾을 문자, 검색시작할 곳)
    string.includes(찾을 문자, 검색시작할 곳)
    'anc'.includes('a', 2) : true

각도기 문제

&& 연산자 사용 할 때

이런식으로 0 < angle && angle < 180 이렇게 사용해야함


중복된 숫자 갯수

filter를 사용함

return array.filter( v => v === n).length

짝수 홀수 갯수

나는 filter를 활용해서 배열을 만든 다음 그 배열들의 길이로 배열을 표현

이렇게 홀수이면 나머지 1값을 반환 배열의 인덱스로 포함하여 리턴도 가능


중앙값 구하기

sort는 항상 a, b => a-b 이용하기


점의 위치 구하기

이렇게 한 개를 두고 옆에거에 따라 return하는 값이 다르게 하면 됨


배열 뒤집기

내림차순이 아니라 배열을 뒤집으려면 reverse()를 쓰면됨


★ 문자 반복 출력하기

my_string = ['hello']
배열에서 각 문자를 주어진 n만큼 반복하는 것


split을 활용하여 문자열 hello의 각각을 배열에 담음
그 각각에 대한것을 repeat(n)을 활용하여 반복해서 acc에 넣어준 후 반환..

그냥 split()과 split('')의 차이

아무것도 없을 땐 전체반환 ''은 인덱스별로 나옴


배열 원소의 길이

나는 조금 복잡하게 생각을 했던 것 같다


특정 문자 제거하기 (replaceAll)

replaceAll 사용하면 좋음


짝수는 싫어요

특정 정수가 주어졌을 때 그 정수까지의 홀수만을 표기

나는 나머지가 1인 것들을 모아서 return 했지만
이렇게 그냥 그 정수 이전까지 i를 2씩 올려서도 가능


문자열 뒤집기

split('') (문자열) 활용
hello를 ["h", "e", "l", "l", "o"] 로 바꾸어줌
그 후 reverse를 통해 뒤집음 ["o", "l", "l", "e", "h"]
마지막으로 join을 통해 olleh를 반환


배열 두 배 만들기

나는 map을 활용해서 map( v => v *2 ) 를 했지만
역시나 reduce를 활용해도 가능 했었다

이런식으로 [...a]를 통해 a의 값을 풀어준 다음 b*2 (각각의 요소들을 두 배해주어 반환)

([...a]해서 각 인덱스의 값을 b를 통해 반환)


모음제거

my_string.split('')을 활용하여 hello를
["h", "e", "l", "l", "o"]로 만들어 준 후에

aeiou가 hello를 포함하고 있지 않은 애들로만
배열을 다시 구성한 후에 다시 문자열로 변환하여 내보내줌

즉, 비교대상.includes('찾을문자') -> 있으면 넣어주지 않고 없어야 새로운 배열에 넣어줌

혹은 정규표현식을 사용해도 됨


배열의 유사도


s2와 s1을 비교해서 s1의 것이 s2에 들어가 있는 것만 새로 배열을 만들어주면 됨 filter활용

return s1.filter( v => s2.includes(v)).length

☆ 숨어 있는 숫자의 덧셈 (1)

나는 split을 배열로 만든 후 정수끼리 연산이 가능한 애들만 모아서 다시 배열로 만들어줬음 // ["1", "2", "3", "4"]
그 후 반복문을 통해 하나씩 parseInt로 가져와 정수로 만든 다음 더해준 합계를 반환

하지만 이런식으로 스프레드 연산자로 배열로 만든 후
Number를 통한 형변환을 하여 형변환이 된 애들만을 모아서 반환


★ 자릿수 더하기

a = 1234
이런 애들의 총 자릿수 값을 더하는 것
당연히 배열로 ["1", "2", "3", "4"] 만들어 준 후
각각을 더하는 방법을 썼는데

헷갈리는 것이 한가기 발생

위에는 "1234"
아래는 10
을 반환 당연히도 그 이유는 지정하지 않으면 첫번쨰 애가 들어가는데 첫번째 애는 문자열이기 때문에 문자열 형식으로 더해지는 것
꼭 0을 넣어서 0부터 더하도록 지정


제곱수 판별하기 isInteger

나는 Math.sqrt를 통해 제곱수인지 확인한 후
그의 정수부분으로 나누었을 때 나머지가 0이라면 1을 보냈는데
그럴 필요 없이
isInteger를 활용해서 정수인지 확인하면 됨


대문자와 소문자

stinrg.charCodeAt(index)
해당하는 unicode값을 리턴

"cccCCC"란 문자열 데이터가 주어지면 이를 CCCccc로 변환하는 것
먼저 문자열을 리스트에 넣고

map을 통해 각의 아스키 코드값이 대문자이면 소문자로 소문자이면 대문자로 바꾸어 return


가위 바위 보

나는 먼저 split.('')을 통해 배열로 변환한 뒤 map을 통해 각 인자들을 가져온 후 삼항 연산자를 통해 비교해서 값을 넣어준 뒤 join('')을 통해 반환했다

하지만 이렇게 객체를 사용해서 객체의 키값에 해당하는 value들을 모아서 리턴하는 방식도 있음


세균 증식

잘보면 n (정수)를 제외하곤 2의 제곱수만큼 곱해지는 걸 볼 수 있음 그래서 pow를 활용해서 풀었음

나는 for문을 활용해서
function solution(n, t) {
    for (i=1; i<=t; i++){
        n = n*2
    }
    return n
}

이렇게 2를 계속 곱해준 것을 n으로서 활용함
ex n = 7이라면
7 =~ 14
14 =~ 28 ... 등등

문자열 정렬하기 (1) map.(Number)

나는 문자열을 split('')을 통해 배열에 넣어준 다음 filter를 통해 >= 0이상인 애들을 오름차순을 통해 배열에 넣어준 후
.map(Number)를 통해 문자열로 이루어진 배열을 숫자형으로 바꾸었다


직각 삼각형 별찍기 .repeat()


이렇게 찍는 것인데
'*'.repeat(i) 를 활용하여 포문을 돌리면 됨


최댓값 만들기 (2) Math.max

이번엔 음수까지 고려하는 상황이다 나는 Math.max를 쓰지 않고 3항 연산자로 풀었는데 당연히 max로 푸는 방법이 더 나을 것 같다


인덱스 바꾸기 .splice(누구부터, 얼마나, 뭐로)


.splice를 사용해서 원하는 위치의 글자를 주어진 값으로 바꾸면 됨

다른 사람은 구조분해할당을 사용하여 풂


배열 회전 시키기

나는 함수를 만들어서 계산하고 풀었는데 생각해보면

다른사람들처럼

numbers.unshift(numbers.pop())

numbers.push(numbers.shift()) 

해서 뽑은 값들을 넣어줬으면 됐다

외계행성의 나이 String.fromCodePoint(인덱스)

아스키 코드로 푸는 값

나는 우선 주어진 정수를 Stinrg과 split을 통해 배열의 각 인덱스에 넣어준 후 for문을 활용해서 각 인덱스를 아스키코드로 치환한 값을 새로운 배열에 넣음.

그 후 그 배열에 있는 값들을 fromCodePoint로 뺴서 또 새로운 배열에 넣어줌

마지막으로 그 배열을 join('')을 활용하여 문자열로 만들어준 후 return

아스키코드 a : 97 | A : 65 | 0 : 48

가장 큰 수 찾기 indexOf


나는 이렇게 바보같이 배열을 한 개 복사한 후 가장큰 애를 빼고 해당하는 애를 뺐다

하지만 이렇게 max를 사용하면되는데 여기서도 비구조화할당을 사용하여서 그 중에 가장 큰 숫자를 찾고 indexOf를 활용해서 인덱스를 구함

profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글