
알고리즘 테스트 28문제
📖 프로그래머스 알고리즘 테스트 풀이 및 회고
📍 1. 직사각형 별찍기
- 문제
- 풀이

- 회고
-사전 프로젝트에 사용했던 메소드인 .repeat을 이용하여 for 문을 돌렸다.
-
.repeat()문자열을 반복한 값을 반환하는 메소드.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12969/solution_groups?language=javascript
📍 2. 짝수와 홀수
- 문제
- 풀이

- 회고
-간단한 조건문을 사용했다.
-
나머지연산자를 이용하여 짝수와 홀수의 구별법을 정립했다. -독학할때 공부했던삼항연산자를 이용해 보다 직관적으로도 풀어봤다. -삼항연산자조건 ? true : falseex) 밥먹었니 ? 응 : 아니
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12937/solution_groups?language=javascript
📍 3. 가운데 글자 가져오기
- 문제
- 풀이

- 회고
-간단한 조건문을 사용했다.
-
나머지연산자를 이용하여 짝수와 홀수의 구별법을 정립했다. -s[i]인덱스넘버를 이용해 필요한 부분을 반환했다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12903/solution_groups?language=javascript
📍 4. 두 정수 사이의 합
- 문제
- 풀이

- 회고
-조건문 속에 반복문을 사용하였다.
-
할당연산자 +=를 사용하였다. -조건문과 반복문이 익숙해지도록 함수(메소드)사용은 하지 않고 풀어봤다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12912/solution_groups?language=javascript
📍 5. 문자열을 정수로 바꾸기
- 문제
- 풀이

- 회고
-
Number()은 문자열을 숫자로 변환하는 함수이며 숫자로 변환할 수 없는 값인 경우NaN을 반환합니다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12925/solution_groups?language=javascript
📍 6. 없는 숫자 더하기
- 문제
- 풀이

- 회고
-
자바스크립트 특정 문자 포함판별 함수등 구글에 검색해includes()를 알아내고mdn에서 공식 문서를 확인하였다. -includes()메서드는 배열이 특정 요소를 포함하고 있는지 판별한다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/86051/solution_groups?language=javascript
📍 7. 음양 더하기
- 문제
- 풀이

- 회고
-계속해서
모든 수들의 합을 구하는 문제들이 나오며반복문과인덱싱할당연산자 +=를 이용해 반복학습 하고 있다. -할당연산자+=오른쪽을 왼쪽에 더해준다.ex) answer += b 는 answer = answer +b 와 같다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/76501/solution_groups?language=javascript
📍 8. 평균 구하기
- 문제
- 풀이

- 회고
-계속해서
모든 수들의 합을 구하는 문제들이 나오며반복문과인덱싱할당연산자 +=를 이용해 반복학습 하고 있다. -할당연산자+=오른쪽을 왼쪽에 더해준다.ex) answer += b 는 answer = answer +b 와 같다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12944/solution_groups?language=javascript
📍 9. 핸드폰 번호 가리기
- 문제
- 풀이

- 회고
-
slice()내장함수를 사용하여 간단하게 문제를 해결했다. 음수를 입력할 경우 맨 뒤에서부터 추출이 가능하다. -slice()메소드는 문자열의 일부를 추출하면서 새로운 문자열을 반환한다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12948/solution_groups?language=javascript
📍 10. 행렬의 덧셈
- 문제
- 풀이

- 회고
-행렬은 배열안에 배열이 있는 2차원 배열이다.
-반복 연습 했던
반복문과인덱싱을 통해 안쪽 배열까지 접근하여 쉽게 풀어낼 수 있었다.중첩반복문
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12950/solution_groups?language=javascript
📍 11. x만큼 간격이 있는 n개의 숫자
- 문제
- 풀이

- 회고
-빈 배열을 먼저 만들어주고 x에 i를 하나씩 곱하며 빈 배열에 넣어주는 것으로 문제를 해결했다.
-
push()메서드는 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환한다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12954/solution_groups?language=javascript
📍 12. 부족한 금액 계산하기
- 문제
- 풀이

- 회고
-이전 문제에서 계속 사용했던
반복문과할당연산자+=를 이용한 총 합 구하기를 반복 연습했다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/82612/solution_groups?language=javascript
📍 13. 2016년
- 문제
- 풀이

- 회고
-구글링을 통해 여러 함수들에 대해 검색하며 검색하는 능력을 길렀다. 영문으로 검색하는 것이 정확하지만 작문에 어려움을 느껴
자바스크립트날짜구하는함수자바스크립트데이터를문자로함수자바스크립트대문자변환함수등 이런식으로 검색하여 어떤 함수(메소드)가 있는지 확인 후 다시 메소드에 대해 검색하거나mdn을 참조하여 문제풀이를 하였다. -메소드체이닝을 이용하여 한줄로 깔끔하게 표현했다. -월 은제로베이스로 세기때문에 -1을 붙혀 원하는 달을 정확히 출력해야 했다. -새로운 Date 객체를 생성하는 방법은new연산자를 사용하는 것이 유일하다. now = Date()처럼 Date를 직접 호출하면 새로운 Date 객체가 아니라 문자열을 반환한다. -toString()은 문자열을 반환하는 object의 대표적인 방법이다. -toUpperCase()메서드는 문자열을 대문자로 변환해 반환한다. 소문자는toLowerCase()
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12901/solution_groups?language=javascript
📍 14. 나누어 떨어지는 숫자 배열
- 문제
- 풀이

- 회고 -오름차순으로 바꿔주는 함수를 검색한후 적용하였다. sort((a,b) => a - b) 에서 b - a 바꿔준다면 내림차순으로 응용 가능하다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12901/solution_groups?language=javascript
📍 15. 내적
- 문제
- 풀이

- 회고
-이전부터 계속 반복한
반복문과인덱싱,할당연산자를 통한 배열의 총합구하기 방식으로 쉽게 풀이했다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/70128/solution_groups?language=javascript
📍 16. 문자열 내 P와 y의 갯수
- 문제
- 풀이

- 회고
-모든 문제들 중에 가장 어려웠고 많은 시간을 쏟은 문제였다. 작성한 코드들은 모두 테스트는 실행되나
런타임에러가 발생했고 끝내 풀이를 참조하며 구글링 결과 해결할 수 있었다. 이 간단한 문제를 해결하기위해 3시간이 넘는 시간을 사용했다. -mathall()을 사용하여 문자열과 일치하는 결과의 반복자를 반환한다. 이때 필수로 같이 사용하는 것이 바로정규표현식이다./p/를 사용하여 p 와 일치하는 모든 값을 반환한다. 이때정규표현식 옵션을 붙히는데g는 모든 결과를 리턴하고i는 대소문자를 구별하지 않는다. -정규표현식은 독학하던 때에 공부했었지만 문제를 풀이할때mathall()과 함께바로 생각해내지 못했다. 다른 예제들을 풀며 학습해야 겠다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12916/solution_groups?language=javascript
📍 17.문자열 다루기 기본
- 문제
- 풀이

- 회고
- 처음으로 논리연산자
&&을 사용하였다.문제에혹은이 있어 바로 논리연산자를 사용하고자 했고 처음엔||도 사용하여삼항연산자를 통해 한줄짜리 코드를 작성했지만 실행은 통과하지만 테스트는 통과하지 못했다. - 아래의 실패한 풀이가 테스트를 통과하지 못한 이유는
지수형식으로 2e22의 경우도 숫자로 인식한다. 이러한 문제를 해결하기위해 문자열 s 를 반복문을 통해 하나씩isNaN로 판별해주었다.
- 처음으로 논리연산자
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12918/solution_groups?language=javascript
📍 18.서울에서 김서방찾기
- 문제
- 풀이

- 회고
indexOf메소드를 이용해 배열속 요소의 인덱스 값을 알아낼수 있었다.보간법을 이용해 문장에 삽입하였다.이때 따옴표가 아닌백틱기호를 사용하여야 한다.indexOf()메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12919/solution_groups?language=javascript
📍 19.수박수박수박수박수박수박
- 문제
- 풀이

- 회고
- 사전웹개발 시절부터 계속해서 사용했던
repeat()메소드가 생각나서 바로 적용하고보니 반복된 문자에서 필요한 만큼slice()메소드로 잘라주면 끝나는 간단한 문제가 됐다. 메소드체이닝을 이용하여 변수를 따로 할당하지 않고 메소드를 순차적으로 선언했다. 덕분에 깔끔한 코드가 완성된다.메소드체이닝은 코드가 간결해져 하나의 문장처럼 읽히게 할 수 있다는 장점이 있지만 너무 길어질 경우 하나의 라인에 너무 많은 일이 일어날 수 있어 디버깅을 하기가 어렵다는 단점이 있다.
- 사전웹개발 시절부터 계속해서 사용했던
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12922/solution_groups?language=javascript
📍 20.완주하지 못한 선수
- 문제
- 풀이

- 회고
- 두 배열의 비교를 위해 이전 문제에 사용한
sort() 메소드를 이용하여 정렬해주었다. - 배열의 정렬
sort()가 숫자를 정렬할 경우 외에도 문자에도 사용이 가능한걸 알게 되었다. 문자인 경우 알파벳 순서로 정렬된다.기본값은 오름차순. sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다.
- 두 배열의 비교를 위해 이전 문제에 사용한
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42576/solution_groups?language=javascript
📍 21.이상한 문자 만들기
- 문제
- 풀이

- 회고
- 앞선 문제를 통해 문자열을 잘라주는 메소드
split()과 대,소문자 메소드toUpperCase(),toLowerCase()를 공부했기에 쉽게 풀어나갈 수 있었으나 처음 실행한 실행값["TrY","HeLlO","WoRlD"]이 기댓값"TrY HeLlO WoRlD"과 달랐다. 이를 해결하기 위해 구글링 결과join()이라는 함수를 사용하여 오류를 해결하였다. join()메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만드는 함수이다.
- 앞선 문제를 통해 문자열을 잘라주는 메소드
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12930/solution_groups?language=javascript
📍 22.자리수 더하기
- 문제
- 풀이

- 회고
- 이전 문제들에서 총합구하기 문제들이 나왔을 때 반복문을 이용했지만 다른 문제풀이들을 보며 내장함수
map(),filter(),reduce()를 공부했기에 딱 메소드 활용 연습할 수 있는 문제가 나왔다 생각했다. toStiring()과 split()은 항상 같이 붙어다니는 느낌이다.메소드체이닝으로 간결하게 코드를 만들었지만 라인이 꽤 길어지니 확실히 가독성이 떨어지는 느낌이다.map()메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.filter()메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.reduce()메서드는 배열의 각 요소에 대해 주어진리듀서(reducer)함수를 실행하고, 하나의 결과값을 반환한다.- 리듀서 함수는 네 개의 인자를 가진다.
- 누산기 (acc)
- 현재 값 (cur)
- 현재 인덱스 (idx)
- 원본 배열 (src)
- 리듀서 함수는 네 개의 인자를 가진다.
- 이전 문제들에서 총합구하기 문제들이 나왔을 때 반복문을 이용했지만 다른 문제풀이들을 보며 내장함수
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12931/solution_groups?language=javascript
📍 23.자연수 뒤집어 배열로 만들기
- 문제
- 풀이

- 회고
- 예시로 주어진 자연수 n이 12345 여서 자연스럽게
sort()를 이용해 내림차순으로 바꿔 문제를 풀었지만 실행은 통과하지만 테스트에서 떨어졌다. 하나씩 디버깅한 결과sort()를revers()로 대체하였다. - 요소를 하나씩 정수로 만들기 위해 나도 모르게 익숙한 반복문을 사용했지만 이전 문제에 사용했던
map()메소드를 이용했으면 보다 간결한 코드를 만들었을것 같다. reverse()메서드는 배열의 순서를 반전시킨다. 첫 번째 요소는 마지막 요소가 되며 마지막 요소는 첫 번째 요소가 된다.
- 예시로 주어진 자연수 n이 12345 여서 자연스럽게
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12932/solution_groups?language=javascript
📍 24.정수 내림차순으로 배치하기
- 문제
- 풀이

- 회고
- 그동안 연습했던 함수들을 활용하여 간단하게 문제를 풀어냈다. 함수의 활용을 반복적으로 연습할 수 있어 조금 더 자신감이 생겼다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12933/solution_groups?language=javascript
📍 25.정수 제곱근 판별
- 문제
- 풀이

- 회고
- 문제에 제곱근 판별이라고 나와 바로
자바스크립트 제곱근 함수에 대해 검색하였다. 그렇게 공부하게된Math.sqrt()와Math.pow()함수 사용하여 문제를 쉽게 풀수 있었다. Math.sqrt()함수는 숫자의 제곱근을 반환한다.(숫자에 루트를 씌움)Math.pow()함수는 base 에 exponent를 제곱한 값을 반환한다. (Math.pow(x,2)는 x의 제곱)
- 문제에 제곱근 판별이라고 나와 바로
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12934/solution_groups?language=javascript
📍 26.제일 작은 수 제거하기
- 문제
- 풀이

- 회고
전개연산자를 통해 배열을 펼쳐 새로운 함수Math.min()으로 배열의 최솟값을 알아냈다.filter()와비교연산자를 이용하여 최솟값을 제외하고 새로운 배열을 반환했다.Math.min()함수는 주어진 숫자들 중 가장 작은 값을 반환한다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12935/solution_groups?language=javascript
📍 27.콜라츠 추측
- 문제
- 풀이

- 회고
- 어려운 함수들보다 반복문과 조건문을 사용하면 직관적이고 쉽게 문제 해결을 할수가 있었다.
- 문제는 어렵게 설명되어있었지만 이 문제가지 풀어오며 조금은 알고리즘에 대해 익숙해져서 인지 문제가 간단하게 느껴졌다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12943/solution_groups?language=javascript
📍 28.하샤드 수
- 문제
- 풀이

- 회고
- 문제는 어려워 보이지만 결국 이전에 풀었던 문제들을 참고하면 똑같은 유형의 문제였다.
- 이제는 익숙해진 함수들을 이용하여 간단한 풀이를 만들어냈다.
- 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12947/solution_groups?language=javascript



























