알고리즘 테스트 28문제

알고리즘 테스트 28문제

📖 프로그래머스 알고리즘 테스트 풀이 및 회고

📍 1. 직사각형 별찍기

  • 문제

  • 풀이

  • 회고 -사전 프로젝트에 사용했던 메소드인 .repeat을 이용하여 for 문을 돌렸다. -.repeat() 문자열을 반복한 값을 반환하는 메소드.

  • 다른풀이 https://school.programmers.co.kr/learn/courses/30/lessons/12969/solution_groups?language=javascript

📍 2. 짝수와 홀수

  • 문제

  • 풀이

  • 회고 -간단한 조건문을 사용했다. -나머지연산자를 이용하여 짝수와 홀수의 구별법을 정립했다. -독학할때 공부했던 삼항연산자를 이용해 보다 직관적으로도 풀어봤다. -삼항연산자 조건 ? true : false ex) 밥먹었니 ? 응 : 아니

  • 다른풀이 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() 메서드는 배열의 순서를 반전시킨다. 첫 번째 요소는 마지막 요소가 되며 마지막 요소는 첫 번째 요소가 된다.

  • 다른풀이 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
JP
이중표Frontend Engineer

3년차 프론트엔드 개발자. Next.js, React, TypeScript 기반 웹 애플리케이션 개발 전문. 대규모 트래픽 환경에서 SSR·ISR 렌더링 전략 설계 경험.

이력서 보기