[프로그래머스 코딩테스트 연습문제] 영어가 싫어요 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 6월 27일
0

코딩테스트연습

목록 보기
84/98
post-thumbnail
post-custom-banner

1. 첫번째 문제 풀이(2024-06-27)

해당 문제는 while문을 실행하고, 그 안에 for문을 arr(문자들이 담긴 배열) 길이만큼 돌리고 돌리면서 앞의 글자가 배열의 글자 중 하나에 해당하면 startWith 메서드로 자르면서 result(문자열)에 현재 i (arr의 특정 문자의 인덱스를 의미하기도 함)를 합쳐주는 작업을 반복하고

최종적으로 numbers 문자열의 길이가 0일때, 그러니까 문자열을 다 잘랐을 때 while문을 빠져나와 합쳐진 result 문자열을 반환해주면 됩니다.

그럼 해당 공식을 적용한 자바스크립트 버전을 소개해 드리겠습니다.

  1. 자바스크립트 버전
function solution(numbers) {
  // arr 배열에 숫자들을 의미하는 문자열들을 하나 하나 담아주고
    let arr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
  // i (arr의 특정 문자에 해당하는 인덱스값)를 저장할 문자열을 result로 초기화
    let result = "";
  // 문자가 남아있는 한 계속 돌릴 while문 선언
    while (numbers.length !== 0) {
      	// for문을 arr 배열만큼 돌리면서
        for (let i = 0; i < arr.length; i++) {
          	// numbers 문자열이 arr의 i번째 요소로 시작할 때, 즉 같은 경우
            if (numbers.startsWith(arr[i])) {
              	// reulst 문자열에 현재 arr의 i번째 요소의 인덱스 값을 의미하기도 하는 i를 더하기 연산으로 이어 붙여주고
                result += i;
               // slice를 이용해 arr의 현재 요소(i 번째)의 길이만큼 numbers에서 잘라내고 반환 받은 값을 numbers에 다시 할당
                numbers = numbers.slice(arr[i].length); // 해당 단어 길이만큼 잘라냄				// 위의 조건에 맞는 코드가 실행될 경우 for문을 더 돌릴 필요가 없기 때문에 break로 빠져나오기
                break;
            }
        }
    }
  	// while문이 끝나면 result를 parseInt로 정수 변환 후 반환
    return parseInt(result); 
}

그리고 자바 버전으로 구현한 코드는 다음과 같습니다.

  1. 자바 버전
class Solution {
        public int solution(String numbers) {
        String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        StringBuilder result = new StringBuilder();

        while (numbers.length() != 0) {
            for (int i = 0; i < arr.length; i++) {
                if (numbers.startsWith(arr[i])) {
                    result.append(i);
                    numbers = numbers.substring(arr[i].length()); 
                    break;
                }
            }
        }
        return Integer.parseInt(result.toString()); 
    }
}

2. 자바와 자바스크립트 풀이 차이점

  1. JS의 경우 배열의 생성이나 parseInt 메서드를 바로 호출하는게 가능한데, 자바의 경우 배열을 생성하는 방식이나 parseInt를 불러오는 방식에서 약간의 차이점이 있었습니다. 그러나 이것이 코드 구현에 있어서 어려움을 초래하지는 않았던 것 같습니다.

  2. 문자열(String) 메서드인 startWith 메서드는 같은 역할을 하기에 잘 안쓰는 메서드이긴 하지만 그래도 공통점이 있는 메서드로 기억할 수 있었습니다.

  3. JS의 경우 문자열을 그냥 붙여주면 되지만, 자바의 경우 기본 타입을 제외하고도 Long, Integer 같은 래퍼 클래스도 불변인데, String도 불변하는 객체라 만약 문자열을 붙여주면 수시로 새로운 객체가 생성되어 메모리 낭비가 발생할 수 있습니다. 그래서 가변적인 길이의 문자열인 StringBuilder로 result 문자열을 생성해 반환값으로 활용했습니다.

profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.
post-custom-banner

0개의 댓글