프로그래머스 가장 가까운 같은 글자 JAVA 풀이 (해시맵, 문자열)

2026. 5. 24. 23:54·코테(Solved.ac + Programmers)
728x90

📌 문제 개요

문자열의 각 위치마다 자신보다 앞에 등장했던 같은 문자 중 가장 가까운 위치와의 거리를 구하는 문제

  • 처음 등장한 문자는 -1
  • 이전에 등장한 문자는
    현재 인덱스 - 이전 인덱스
banana
[-1, -1, -1, 2, 2, 2]

📌 접근 방법

문자를 순서대로 탐색하면서
각 문자의 마지막 등장 위치를 저장

  • 처음 등장한 문자 : -1
  • 이미 등장했던 문자 : 현재 위치 - 이전 위치 계산
  • 이후 현재 위치로 갱신

📌 핵심 아이디어

핵심은 가장 최근 위치만 저장하면 된다는 점

예를 들어 "banana"에서 마지막 a를 처리할 때:

a의 이전 위치 = 3
현재 위치 = 5
거리 = 2

가장 가까운 문자만 필요하므로
이전 모든 위치를 저장할 필요가 없다

HashMap<Character, Integer>
 

형태로 관리하면 됩니다.


📌 전체 코드

import java.util.HashMap;

class Solution {
    public int[] solution(String s) {

        int[] answer = new int[s.length()];
        HashMap<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {

            char ch = s.charAt(i);

            // 처음 등장한 문자
            if (!map.containsKey(ch)) {
                answer[i] = -1;
            } else {
                // 현재 위치 - 이전 위치
                answer[i] = i - map.get(ch);
            }

            // 현재 위치 저장
            map.put(ch, i);
        }

        return answer;
    }
}

📌 나의 오답 / 실수 포인트

처음에는 문자열을 매번 뒤로 탐색해서 이전 문자를 찾으려고 했습니다.

O(N²)

이 되어 비효율적입니다.

HashMap으로 마지막 위치를 저장하면
문자 하나당 O(1)로 처리할 수 있어 전체 O(N)에 해결 가능합니다.


📄 정리

  • 가장 가까운 이전 문자 = 가장 최근 등장 위치
  • HashMap으로 마지막 위치 저장
  • 문자열 한 번 순회로 해결 가능
  • 시간복잡도 O(N)
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 두 개 뽑아서 더하기 (JAVA)  (0) 2026.05.26
프로그래머스 시저 암호 JAVA (문자열, 구현, 아스키코드)  (0) 2026.05.25
프로그래머스 3진법 뒤집기 (JAVA)  (0) 2026.05.22
프로그래머스 최소직사각형 (JAVA)  (0) 2026.05.22
프로그램머스 이상한 문자 만들기 (JAVA)  (0) 2026.05.21
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 두 개 뽑아서 더하기 (JAVA)
  • 프로그래머스 시저 암호 JAVA (문자열, 구현, 아스키코드)
  • 프로그래머스 3진법 뒤집기 (JAVA)
  • 프로그래머스 최소직사각형 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    배열
    브루트포스
    java
    자료구조
    level1
    피보나치
    기출문제
    정렬
    시뮬레이션
    springboot
    자바
    solved.ac
    프로그래머스
    정보처리기사
    코딩테스트
    dp
    알고리즘
    백엔드개발자
    실기
    수학
    Level2
    백준
    구현
    완전탐색
    level0
    정처기실기
    문자열
    정보처리기사 실기 기출문제
    정처기오답노트
    정처기
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 가장 가까운 같은 글자 JAVA 풀이 (해시맵, 문자열)
상단으로

티스토리툴바