[Programmers / Level1] 142086. 가장 가까운 같은 글자 (Java)

이하얀·2024년 8월 25일
0

🕊️ 프로그래머스

목록 보기
33/43

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 가장 가깝게 있는 문자에 있는지 여부를 반환해주는 문제


알고리즘


풀이 시간 : 17분

  • 정답이 될 문자열 길이 설정(s.length)
  • 시작점은 -1로 초기화
  • 이중 for문
    • 바깥 : 1부터 s.length까지 반복
    • 안쪽 : i-1부터 0까지 감소하며 i와 j가 일치하면 i-j 반환(가장 작은 수를 반환하게 될 것)
import java.util.*;

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        
        answer[0] = -1;
        
        for(int i=1; i<s.length(); i++){
            for(int j = i-1; j >= 0; j--){
                if(s.charAt(i) == s.charAt(j)){
            answer[i] = i-j;
                } else {
                    answer[i] = -1;
                }
            }
        }
        return answer;
    }
}


오답체크


  • 테스트 미통과 문제
  • break문 미작성으로 인해 모든 for문을 순회하고 결과적으로 -1만을 반환하는 문제였음.
//before
for(int i=1; i<s.length(); i++){
	for(int j = i-1; j >= 0; j--){
		if(s.charAt(i) == s.charAt(j)){
            answer[i] = i-j;
//after        
for(int i=1; i<s.length(); i++){
            for(int j = i-1; j >= 0; j--){
                if(s.charAt(i) == s.charAt(j)){
            answer[i] = i-j;
            break;


최종 풀이


풀이 시간 : 30분(첫 풀이 시간 포함)

  • 정답이 될 문자열 길이 설정(s.length)
  • 시작점은 -1로 초기화
  • 이중 for문
    • 바깥 : 1부터 s.length까지 반복
    • 안쪽 : i-1부터 0까지 감소하며 i와 j가 일치하면 i-j 반환(가장 작은 수를 반환하게 될 것)
import java.util.*;

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        
        answer[0] = -1;
        
        for(int i=1; i<s.length(); i++){
            for(int j = i-1; j >= 0; j--){
                if(s.charAt(i) == s.charAt(j)){
            answer[i] = i-j;   
                    break;
                } else {
                    answer[i] = -1;
                }
            }
        }
        return answer;
    }
}


결과

🚨 참고할 풀이

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        
        for(int i=0;i<s.length();i++){
            if(i !=0){
                int idx = s.substring(0,i).lastIndexOf(s.charAt(i));
                if(idx != -1){
                    answer[i] = i-idx;
                    
                }
                else{
                    answer[i] = idx;
                }
            }
            else{
                answer[i] = -1;
            }
        }
        
        return answer;
    }
}
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글