이것저것아무거나공부한다

이것저것 공부한다:: 프로그래머스 코딩 문제 40(다음주 20 추가 풀이)

https://school.programmers.co.kr/learn/courses/30/lessons/120895

프로그래머스 120895번, 문자열을 바꾼 뒤 return하는 문제이다.

replace 등의 메소드가 있으리라 생각했지만 일단 위와 같은 식으로 진행하였다.

결과는 당연히 오류였다. 웹 서칭을 진행한 결과 두 가지 방법이 대세였다.

1. 구조분해할당

.split(seperator, limit) 메소드 (지정한 구분자를 이용해 여러 개의 문자열로 나눈다. 반환값은 나눠진 문자열이 담겨있는 배열이다.)

이후 .join(‘ ’); 명령어를 이용해 합치는 식으로 문제를 풀었다고 한다.

한 편 splice() 메소드도 사용할 수 있다. splice()는 배열의 기존 요소를 삭제/교체하거나 새 요소를 만드는 메소드이다. arr.splice(변경을 시작할 인덱스, (배열에서 제거할 요소의 수), (배열에 추가할 요소)) 로 사용한다.

https://summermong.tistory.com/138

https://velog.io/@pakxe/JS-split-%EB%A9%94%EC%84%9C%EB%93%9C

다음과 같이 풀어내었다.


https://school.programmers.co.kr/learn/courses/30/lessons/181839

절대값은 Math.abs()임을 확인하지 못해 문제 발생.

Math.abs() 정적 메소드. 숫자의 절대 값 반환.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/abs


https://school.programmers.co.kr/learn/courses/30/lessons/120910

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

문제야 금방 풀었지만 시간도 없으면서 다른 해결방법이 없지 않을까 싶어 문제 해결 이후 방법 확인.

return n<<t; 한 줄로 끝낸 사람을 발견했다. 정말 대단하다고 생각함.

Math.pow()를 이용한 이 역시 발견함. ‘제곱을 계산하는 함수’임.


https://school.programmers.co.kr/learn/courses/30/lessons/120909

사실 이 문제는 저번 주에 풀지 않고 모른 채 넘어갔던 문제이다. 새로운 메소드를 검색하지 않고 알던 것만을 이용해서 풀어야겠다는 생각이 들어서이다. 그러나 더 나은 함수가 있다면 그걸 사용하지 않을 이유가 없다.

가볍게 검색을 진행하여 Math.sqrt() 를 알아내었다. 이는 제곱근을 구하는 메소드이다.

https://velog.io/@edwinstory/codingtest010

다음과 같이 풀었으며, 위 포스트를 참고하였다.


https://school.programmers.co.kr/learn/courses/30/lessons/120889

풀라면 풀 수 없는 것은 아닌데, 삼항 연산자 사용법을 익히고 싶어서 이 곳에 넣어보았다.

조건(삼항) 연산자는 JS서 세 개의 피연산자를 받는 유일한 연산자이며, if-else 의 대체재로 자주 사용된다.

return (조건) ? 값1 : 값2 의 식이다

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_operator

삼항 연산자로 바로 풀었다.


Math.ceil(n/slice), 올려서 처리. 한 줄로 처리하시는 분들은 정말 대단하시다.


https://school.programmers.co.kr/learn/courses/30/lessons/181930

이런 문제가 나오면 조금 착잡하다. 더 좋은 방법이 있을텐데..하고. 살짝 욕심이 난다.

이 문제에서 a*a 대신 a**2(거듭제곱)을 쓸 수 있다는 것을 알았다.

확인해보니 set 쓰는 경우 빼면 대부분 if문을 쓰더라.

Set은 고유한 값의 컬렉션이고, Set의 요소를 삽입 순서대로 호출?한다고 한다..

참고::

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set/Set

https://velog.io/@minew1995/JavaScript-new-Set

즉, Set은 value값 중 중복을 허용하지 않는 collection이다.


https://school.programmers.co.kr/learn/courses/30/lessons/181898

딱 보아도 filter 쓰는 문제. 근데 바쁘다고 filter 쓰는 법을 복습하지 않았더니 까먹었다.

결국 이와 같이 풀었다.

확인해보니 findIndex() , 배열에서 특정 조건을 만족하는 요소를 찾아 첫 번째 요소의 인덱스를 반환하는 함수

를 쓴다고 한다.


코딩 테스트에는 최소공배수를 구하는 문제가 너무 많은 것 같다… … 역시 푸는 법을 모르겠지만.. 더 미룰 수 없겠다 싶어 한 번 웹서칭을 시도했다.

다음 방식은 순회하며 최소공배수를 구하는 방식이다. lcm이 최소공배수를 구하는 방식이다. while true 동안 계산을 진행하여, lcm과 6으로 나누었을 때 모두 0이 되도록 구하는 식이다.

이후 최소공배수를 6으로 나누어 피자 조각을 구했다. 다음이 내 답이다.::

해결 방법중에서는 이것이 제일 깔끔하다고 느꼈다.


이런 문제를 보면 string서 search하는 함수가 뭔지 궁금해진다. 그래서 검색을 한 번 진행해보았다.

string.indexOf() //문자열에 어떤 문자열이 포함되어있는지 확인, 존재하지 않으면 -1, 존재하면 index

string.insludes() //문자열에 어떤 문자열이 포함되어있는지 확인, 존재하면 true, 존재하지 않는다면 false,

그러나 이 문제는 접미사를 보는 문제이므로 다른 방식으로 접근하여야 한다.

와중에 이런 식이 있었다. endWith()….. 아…..

너무쉬운방법이.,.

나는 왜 돌아갔는가..


https://school.programmers.co.kr/learn/courses/30/lessons/120911

이 문제, lower로 정리하는 법은 아나 이를 정렬하는 법에 대해서는 조금 고민하였다. 아스키 코드로 배열하면 되는걸가..

아스키 코드로 정리하면 될까 싶어 해보았다.


https://school.programmers.co.kr/learn/courses/30/lessons/181872

끝에서부터 찾으면 될 것 같은데(있었던 것 같다) 방법이 보이질 않는다.

저번에 찾아본 것 같은데… 하고 보니, endWith()은 있는데 다른 건 보이지 않는다…

임시로 string을 하나 잡아서 잘라가며 찾아볼까? 하고 다음과 같이 코드를 짜보았다.


기억하기로는 splice라는 함수를..이용하면 될텐데

https://school.programmers.co.kr/learn/courses/30/lessons/181900

… 잘 풀었음


https://school.programmers.co.kr/learn/courses/30/lessons/120886

다른 건 좋은데 if문서 문제가 발생한 것 같다.

카테고리
#기타

댓글 0



추천 포스트