-
[프로그래머스] 가장 가까운 같은 글자 자바코딩테스트 2025. 3. 31. 10:12반응형
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
String s의 각 문자별로 조회하여, 해당 문자보다 앞에 있으면서 가장 가까운 곳에 있는 글자와의 거리정보를 int[]에 반환하라.
제한사항
1. 문자열에 하나만 존재하는 문자의 경우 거리정보는 -1로 간주한다.
2. 1 <= s.length <= 10000 이며 s는 소문자로만 이루어져 있다.
접근
s 를 순회하여 firstIdx == lastIdx 이거나 firstIdx == i 인 경우 우선 -1로 저장한다.
firstIdx != lastIdx 한 값의 위치만 찾으면 되므로 lastIdx - firstIdx 한 값을 저장하면 될 것 같다고 생각했다.
그러나 "banana"를 기준으로 삼고 코딩을 하다 보니, 이 접근 방법은 해당 문자가 2개이상 존재하면 처리할 수 없었다.
로직 수정
2개 이상 존재하는 문자열도 처리할 수 있는 근본적인 방법이 필요했다.
처리한 결과값은 해당 문자와 가장 가까운 앞에 있는 문자와의 거리였으므로
for -- 연산으로 처리할 수 있겠다 싶어 로직을 다시 구성했다.
for -- 연산 도중, 동일한 문자를 만나면 break로 탈출하도록 하여 바로 앞 문자를 만난 경우만 값을 갱신한다.
public int[] solution(String s) { int[] answer = new int[s.length()]; int lastIdx = -1; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); int firstIdx = s.indexOf(c); lastIdx = s.lastIndexOf(c); //하나만 존재하거나 같은 문자 중 맨 앞에 위치한 문자 if(firstIdx == lastIdx || firstIdx == i){ answer[i] = -1; } else { // 앞 쪽에 가장 가까운 문자 찾기 int leftDistance = -1; for(int j = i -1; j >= 0; j--){ if(s.charAt(j) == c){ leftDistance = i - j; answer[i] = leftDistance; break; } } } } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 명예의 전당 (1) 자바, 최소값, 정렬 (0) 2025.03.31 [프로그래머스] 문자열 나누기 자바 (0) 2025.03.31 [프로그래머스] 크기가 작은 부분 문자열 자바 (0) 2025.03.31 [프로그래머스] 개인정보 수집 유효기간 자바 (0) 2025.03.30 [프로그래머스] 둘 만의 암호 자바 (0) 2025.03.30