일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 다이나믹프로그래밍
- 문자열
- HashMap
- BFS
- 브루트포스
- 아스키코드
- SQL
- Queue
- 배열
- 그리디
- 백트래킹
- 다리 만들기
- 구현
- Stack
- DP
- 프로그래머스
- LIS
- 스택
- 완전탐색
- dfs
- oracle
- 백준
- 탐색
- 빅데이터
- BufferedReader
- Python
- 새벽코딩
- 시뮬레이션
- Java
- 알고리즘
- Today
- Total
새벽코딩
[프로그래머스] 가장 가까운 같은 글자 (구현, 문자열) (JAVA) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/142086#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
- b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
- n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
- a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s은 영어 소문자로만 이루어져 있습니다.
입출력 예sresult
"banana" | [-1, -1, -1, 2, 2, 2] |
"foobar" | [-1, -1, 1, -1, -1, -1] |
※ JAVA 코드 (가장 가까운 같은 글자)
class Solution {
public int[] solution(String s) {
int[] answer = {};
// 입력 문자열의 길이
int len = s.length();
answer = new int[len];
// 각 알파벳의 인덱스
int[] alphabet = new int[26];
for(int i = 0; i < 26; i++){
alphabet[i] = -1;
}
for(int i = 0; i < s.length(); i++){
int idx = s.charAt(i) - 'a';
// 이전에 해당 알파벳이 존재하지 않을 경우
if(alphabet[idx] == -1){
answer[i] = alphabet[idx];
}
// 이전에 해당 알파벳이 존재하는 경우
else {
answer[i] = i - alphabet[idx];
}
// 알파벳 배열에 현재 인덱스 초기화
alphabet[idx] = i;
}
return answer;
}
}
※ 생각정리 (가장 가까운 같은 글자)
가장 가까운 같은 글자 문제는 문자열 구현문제이다. 입력받은 문자열을 읽어드리기 전에 alphabet 배열을 선언하여 a~z 총 26크기의 배열에 각 값에 -1을 넣어두었다.
s 문자열을 0부터 s.length()전까지 반복문을 실행하였고 만약 문자열의 각 문자(알파벳)가 배열에 -1이라면 answer[i]에 alphabet값(-1)을 담아둔다.
만약 문자(알파벳)가 -1이 아니라면 즉, 이전에 해당 알파벳이 존재했었다면 현재 인덱스에서 이전에 존재했던 가장 뒤의 해당 알파벳 인덱스를 빼주어 배열에 담는다.
-새벽코딩-
'알고리즘' 카테고리의 다른 글
[백준] [16948] 데스 나이트 (BFS) (JAVA) (0) | 2023.01.03 |
---|---|
[백준] [3184] 양 (BFS) (JAVA) (0) | 2023.01.01 |
[백준] [1388] 바닥 장식 (BFS) (JAVA) (0) | 2022.12.31 |
[백준] [2667] 단지번호붙이기 (BFS) (JAVA) (1) | 2022.12.30 |
[백준] [2231] 분해합 (브루트포스) (JAVA) (0) | 2022.12.29 |