본문 바로가기
eval 함수 문자열로 된 수식이 주어지고 이걸 계산하는 함수를 구현하려면 어떻게 해야할까? 예를 들어 문자열 "1 + 6"을 계산하려면 공백을 기준으로 분리하거나 구분자를 기준으로 분리하고 숫자는 타입을 변환해야 계산이 가능할 것이다. 그런데 Javascript에서는 eval 이라는 함수를 사용하면 문자열로 된 코드를 바로 인식하여 계산까지 도와준다고 한다. eval eval (Evaluate)은 "평가" 또는 "실행"의 의미를 가지며, 주로 프로그래밍 언어나 스크립트 언어에서 문자열로 표현된 코드나 수식을 실행하는 데 사용된다. eval 함수는 문자열로 주어진 코드를 실행하고 그 결과를 반환하는데 동적으로 코드를 생성하거나 실행해야 할 때 유용하다. 주로 스크립트 언어, 특히 JavaScript, Python, R.. 2023. 10. 17.
[프로그래머스] 더한 원소들의 합 문제 설명 및 예시 주어진 문자열 중 Z가 있다면 Z 바로 전에 나온 숫자를 제외하고 나머지 숫자를 연산하는 문제이다. 풀이 단순 반복문과 조건문으로 코드를 작성하다가 Stack을 사용하면 효율적으로 해결할 수 있지 않을까? 생각했다. 마침 얼마 전에 Stack에 대해 공부하고 포스팅을 했으니 문제에 대입해보기로 하였다. 1. 연산을 위해 Integer 타입의 Stack을 생성한다. 2. 공백을 기준으로 나눈 문자열 s에서 반복문을 활용하여 "Z"를 만나면 stack.pop()으로 *최상위 스택 요소를 제거한다. "Z"가 아니라면 Stack에 요소를 삽입한다. * Z 바로 전에 나온 숫자를 제거해야 하므로 stack.pop() 메서드가 적절하다. 3. "Z"와 "Z" 전에 나온 숫자를 제거한 나머지 요소.. 2023. 10. 17.
[프로그래머스] 진료순서 정하기 문제 설명 및 예시 주어진 배열의 원소들을 응급도의 내림차순으로 재배치한 배열로 반환하는 함수를 완성하는 문제이다. 풀이 원본 배열을 복사 후 응급도가 높은 순서대로 순위를 부여하는 방법으로 문제를 해결하려했다. 이번에는 Arrays.binarySearch(array, key) 라는 메서드를 활용하여 문제를 풀 수 있었다. 1. 정답으로 제시할 배열의 길이를 원본 배열의 길이와 똑같이 설정해준다. *index 오류 방지 2. 원본 배열을 복사 후 응급도를 내림차순으로 정렬해준다. 3. 반복문과 Arrays.binarySearch(array, key)를 활용하여 원본 배열의 위치를 찾는다. *Arrays.binarySearch(array, key) 주어진 배열 array에서 특정 요소 key의 위치를 찾는.. 2023. 10. 16.
[프로그래머스] A로 B 만들기 문제 설명 및 예시 두 문자열이 주어지고 before의 재조합으로 after를 만들 수 있으면 1 , 그렇지 않으면 0을 반환하는 함수를 완성해야 한다. 풀이 문제를 보자마자 정렬을 활용하면 되지 않나? 생각했다. before와 after 문자열의 순서는 각각 다르다해도, 정렬 후 비교하면 재조합하여 일치한지 알 수 있을테니 말이다. 1. 두 문자열을 각각 char 배열로 변환해준다. *toCharArray() 메서드 활용 2. 두 배열을 각각 정렬해준다. 3. 정렬한 배열을 비교해서 동일하다면 1을 반환하는 함수를 작성한다. 동일하지 않다면 순서를 어떤 식으로 바꾸던 간에 두 문자열은 같아질 수 없기 때문이다. 정렬 활용을 캐치하여 금방 해결했던 문제. toCharArray() 메서드와 Arrays.e.. 2023. 10. 16.
[프로그래머스] 중복된 문자 제거 문제 설명 및 예시 문자열에서 중복된 문자를 하나만 남겨 반환하는 함수를 완성하는 문제이다. 풀이 중복 제거 방법에 대해 고민하다가 반복문이나 조건문을 활용한 방법이 아닌 다른 방법을 활용한 코드를 작성하고 싶었다. 구글링을 하다가 distinct() 메서드를 알게 되어 문제에 적용해보기로 했다. 1. 문자열을 chars() 메서드로 IntStream으로 변환한다. *반복문보다 간결하고 가독성 좋게 활용 가능하다고 한다. 2. distinct() 메서드로 중복된 요소를 제거한다. *중복된 요소 중 하나만 남긴 후 스트림으로 반환한다. 3. mapToObj() 메서드를 사용하여 스트림의 각 요소를 변환한다. 4. Collectors.joining() 메서드를 사용하여 스트림의 각 요소를 문자열로 결합한다... 2023. 10. 16.
[프로그래머스] 369 게임 문제 설명 및 예시 우리에게 익숙한 369 게임을 주제로 한 문제이다. 말해야 하는 숫자에 따라 몇 번의 박수를 쳐야 하는지 구하는 함수를 완성하는게 목적이다. 풀이 주어진 숫자에 3, 6, 9 가 들어간 횟수만큼 박수 횟수를 증가하는 함수를 생성하면 되지 않을까 생각했다. 예를 들어 369가 주어진다면 박수 3번, 예시처럼 29423이면 9와 3이 포함되므로 2번을 반환해야 한다. 그러기 위해서는 반복문과 조건문을 같이 활용하여 자릿수마다 판단해야 하므로 문자열로 변환한 후 적용해보기로 했다. 1. Integer.toString() 함수로 주어진 숫자를 문자열로 바꾼다. 2. toCharArray() 함수로 문자열에 반복문과 조건문을 같이 사용하여 3,6,9중 하나가 포함되어 있으면 박수 횟수를 증가한.. 2023. 10. 16.
[프로그래머스] 최댓값 만들기 (2) 문제 설명 및 예시 주어진 배열의 원소 중 두 개를 곱한 최댓값을 반환하는 함수를 작성하는 문제이다. 풀이 1. 우선 배열의 원소를 오름차순으로 정렬한다. 2. 배열의 길이를 구한다. 3. 배열에 음수가 포함될 수 있으므로 가장 작은 음수끼리의 곱 , 가장 큰 양수끼리의 곱을 비교해 최댓값을 반환해야한다. 4. 배열 길이를 활용해 가장 큰 두 개의 양수 (마지막 원소, 그 전 원소)를 곱한 값과 가장 작은 두 개의 음수 (첫 번째 원소, 두 번째 원소)를 곱한 값 중 큰 값을 반환한다. *Math.max() 함수 활용 최댓값을 구하는 문제는 흔히 볼 수 있고 익숙하지만 이번 문제는 음수까지 고려해야하는게 포인트라고 생각한다. 배열의 정렬과 Math.max()함수를 활용하면 어렵지 않게 해결할 수 있는 문.. 2023. 10. 16.
[프로그래머스] 피자 나눠 먹기 (2) 문제 설명 및 예시 피자를 나눠먹을 사람의 수 n이 주어지고, 모두가 조각을 균등하게 먹을 수 있는 피자의 최소 판 수를 구하는 문제이다. 풀이 1. 인원 수에 상관없이 피자는 최소 1판이 필요하므로 선언한다. 2. 피자 조각은 항상 6조각이고, 피자 판 수와 곱해서 인원 수로 나누었을 때 나머지값이 없다면 모두 균등하게 분배된 것이므로 반복문을 중단하고, 나머지값이 존재하면 피자 판 수를 증가하는 while문을 작성한다. 조건문과 반복문을 사용해야 하는 것을 캐치했다면 금방 해결할 수 있는 문제였다. while문을 활용하여 어렵지 않게 통과할 수 있었다 👍 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120815 프로그래머스 코드 중심.. 2023. 10. 16.
[프로그래머스] 다음에 올 숫자 문제 설명 및 예시 주어진 배열은 등차수열 혹은 등비수열이고, 원소끼리의 공차 혹은 공비를 구해 그 다음 올 숫자를 반환하는 문제이다. 풀이 배열이 등차수열인지 등비수열인지 판단해야 값을 구할 수 있다. 1. 배열의 두 번째 원소와 첫 번째 원소의 차이 값 , 세 번째 원소와 두 번째 원소의 차이 값을 구한다. 2. 두 차이값이 일치하면 모든 원소 끼리의 차이 값이 동일하므로 등차수열이고, 일치하지 않으면 등비수열이다. 테스트에 무난하게 통과하였다. 등차수열과 등비수열의 차이, 배열의 원소 개념을 알고있다면 충분히 풀 수 있는 문제라고 생각한다. 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120924 2023. 10. 13.