[프로그래머스 코딩테스트 연습문제] 가장 가까운 같은 글자 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 6월 28일
0

코딩테스트연습

목록 보기
86/106
post-thumbnail

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

해당 문제는 일반적인 배열의 접근 순서 (왼쪽에서 오른쪽)를 이용하기 보다는 오른쪽에서 왼쪽으로(인덱스 0으로 이동) 이동을 하면서 가장 근접하면서 같은 숫자의 인덱스 차이를 이용해 찾고자 하는 값을 구했는데요.

첫번째 for문은 배열의 순서대로 실행할 for문을, 두번째 for문은 배열의 i번째부터 왼쪽으로 순회하며 같은 숫자가 나오면 그 차이를 구하고, 발견하지 못했다면 -1를 반환 받도록 했습니다.

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

  1. 자바스크립트 버전
function solution(s) {
  	 //	전달 받은 문자열을 배열로 반환
     let arr = s.split("");
     let result = [];
	
  	// 배열을 순서대로 순회할 for문
    for(let i = 0 ; i < arr.length ; i++){
      	// 같은 숫자를 발견했는지, 그러지 못했는지에 따라 값을 변화시킬 스위치 플래그 설정
        let flag = false;
      	// i번째부터 왼쪽으로 순회할 for문 (i부터 j가 왼쪽 방향인 0을 포함할 때까지 감소), 이때의 j의 위치는 현재 i 위치의 바로 이전인 i-1로 지정하여 i의 앞에 숫자가 있도록 만들 수 있음.
        for(let j = i-1 ; j >= 0 ; j--){
          	// 만약 같은 숫자를 찾았다면 
            if(arr[i] === arr[j]){
              	// i(현재 배열 요소의 인덱스 위치)에서 j(같은 숫자의 인덱스 위치)를 뺀 값이 양수일 때 result 배열에 push하고 flag를 true로 받은 뒤 for문을 종료시켜 그 아래의 같은 숫자를 찾지 못했을 때 발동되는 if문을 지나치게 해야함
                if(i - j > 0){
                    result.push(i-j)
                    flag = true;
                    break;
                }
            }
        }
      	// 만약 같은 숫자를 찾지 못했다면 flag는 여전히 false이므로 false의 역전인 true가 if의 조건이 되어 if문 안의 result.push(-1) 코드를 실행
        if(!flag){
            result.push(-1);
        }
    }
  	// 처리된 result 배열을 반환
    return result;
}

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

  1. 자바 버전
class Solution {
     public int[] solution(String s) {
        char[] arr = s.toCharArray(); 
        int[] result = new int[arr.length]; 

        for (int i = 0; i < arr.length; i++) {
            boolean flag = false;
            for (int j = i - 1; j >= 0; j--) {
                if (arr[i] == arr[j]) {
                    if (i - j > 0) {
                        result[i] = i - j;
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag) {
                result[i] = -1;
            }
        }
        return result;
    }
}

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

  1. JS의 경우 그냥 간단하게 toString 메서드로 문자열로 반환 받아 그 상태로 인덱스에 접근할 수 있었으나, 자바의 경우 문자열에서 charAt 메서드로 하나 하나 접근해야 하거나, CharArray 메서드로 아예 문자열을 문자 배열로 반환 받아 사용하면 됩니다. 그 외는 타입만 다를 뿐 똑같습니다.
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글