Jam's story

[프로그래머스] 가장 가까운 같은 글자 java 본문

코딩테스트/프로그래머스

[프로그래머스] 가장 가까운 같은 글자 java

애플쩀 2022. 12. 21. 12:58
  • answer배열은 정답을 반환할 배열
  • answer[0]은 처음 나오는 문자이니 무조건 -1
  • 이중 for문을 사용해서 검사
  • answer[i]에는 i와 j의 거리를 넣기
  • stack은 마지막으로 나온 값(j의 값)을 저장하기 위해서
  • 그래서 stack size를 체크해서 똑같은 값이 2개 이상이면, 마지막 값을 pop() 이나 peek()해옴
  • stack size가 0이라면 -1
import java.util.*;
class Solution {
	public static int[] solution(String s) {

		char[] arr=s.toCharArray();
		int[] answer = new int[arr.length];
		answer[0]=-1;
		Stack<Integer> can=new Stack<>();
		for (int i = 1; i < arr.length; i++) {
			for (int j = 0; j <i; j++) {
				
				if(arr[i]==arr[j]) {
					can.push(j);
					answer[i]=i-j;
				}

			}//for-j

			if(can.size()>1) {
				answer[i]=i-can.pop();
				
			}else if(can.size()==0) {
					answer[i]=-1;
			}
            
				can.clear();
		}
	
		return answer;
	}
}

 

다시 풀어봤는데 더 간단하게 풀렸다.

import java.util.*;
class Solution {
		public static int[] solution(String s) {
		//정답을 반환할 배열 
		int[] answer =new int[s.length()];
		//string -> char 배열로 쪼개기  
		char[] arr=s.toCharArray();
	
		answer[0]=-1;
		for (int i = 1; i < arr.length; i++) {
			answer[i]=-1;
			for (int j = 0; j <i; j++) {			
				if(arr[i]==arr[j]) {	
					answer[i]=i-j;
				}	
			}//for-j	
		}
		return answer;
	}
}

 

Comments