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

[Programmers] Lv.1 가장 가까운 같은 글자 - 연습문제 (Java)

게임접음 2023. 5. 25. 18:22
728x90

시간 날때마다 틈틈히 풀었던 문제라 소요시간을 알 수 없다.... ㅠㅠ

 

확실히 문제를 많이 풀수록 어떤식으로 접근해야하는지 알게 되는 것 같다.

 

문제 확인 -> 요건 중 시간복잡도(효율성) 계산 -> 알고리즘 작성(함정요건 조심..ㅠㅠ) -> 구현

 

이 순서로 프로세스가 잡혀가는듯 하다 !

 

애매한 채로 무작정 코딩을 하면 시간이 더 오래걸려서, 나중에 싹 다 지우고 다시 처음부터 하게 된다 ㅠㅠ

 

확실하게 설계하고 시작하자 !! 


문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/142086#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

코드으..

import java.util.*;

class Solution {
    public int[] solution(String s) {
        List<Integer> answer = new ArrayList<Integer>();
        
        String[] sArr = s.split("");
        
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < sArr.length; i++) {
            // 더하기
            list.add(sArr[i]);
            // lastIndexOf 찾은 부분부터, 뒤로 탐색시키기 O(1) 고려
            // firstIndex와 lastIndex를 찾아서 두개이상 존재하는지 확인
            int firstIndex = list.indexOf(sArr[i]);
            int lastIndex = list.lastIndexOf(sArr[i]);
            
            int result = -1;
            if (firstIndex != lastIndex) {
                int reverseIndex = 0;
                for (int j = i - 1; j > -1; j--) {
                    reverseIndex++;
                    if (list.get(j).equals(sArr[i])) {
                        result = reverseIndex;
                        reverseIndex = 0;
                        break;
                    }
                }
            }
            answer.add(result);
        }
        return answer.stream().mapToInt(integer -> integer).toArray();
    }
}

어려웠던 점

  - for문을 거꾸로 돌리려니 갑자기 머리가 안돌아감 .. ^^ 반복 연습 필요
  - 더 좋은 방법이 있을것 같음.. 다른 분의 코드 참고 필요

반례 추가 사항

"banananba", [-1, -1, -1, 2, 2, 2, 2, 7, 3]


소요시간 : 1시간이상 ..^^

 

 

728x90