코딩테스트/프로그래머스
[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