Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- reshape
- 판다스
- tensorflow
- 개발자
- 머신러닝야학
- Java
- 딥러닝
- 머신러닝
- MySQL
- 연산자
- JavaScript
- 머신러닝(딥러닝)
- 데이터베이스 개론
- 데이터베이서
- 이것이 자바다
- 야학
- 카카오클라우드스쿨2기
- 파이썬
- CNN
- pandas
- 데이터베이스
- Database
- 생활코딩 머신러닝야학
- Python
- flatten
- LeNet
- 생활코딩
- 생활코딩 데이터베이스
Archives
- Today
- Total
IT's 우
[java] 프로그래머스 - 압축 본문
728x90
📖 풀이한 문제
💡 문제에서 사용된 알고리즘
- HashMap
📜 코드 설명
- map을 사전처럼 사용 (key : 단어, value : 색인 번호)
- 변수 idx : 사전에 색인번호
- 처음에 map에 A - Z까지의 idx를 넣어준다.
- 리스트 list : answer에 해당하는 색인번호를 넣을 리스트
- for문: w 찾기 시작하는 반복문
- while문 : w를 완성하는 반복문
- 반복문을 사용하여 단어를 탐색한다. for문안에 while문에서 다음 문자를 붙인 단어가 map에 있더라면 현재 문자(now)에 다음 문자를 붙여주고 사전에 없더라면 다음 문자를 붙인 단어를 map에 넣어준다. for문에 i가 맨 마지막이라면 다음 문자가 없으므로 그 점을 유의해준다.
- while 반복문이 끝난 후 사전에 들어있는 now의 색인번호를 리스트에 넣어준다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📜 코드
import java.util.*;
public class 압축 {
public int[] solution(String msg) {
// map을 사전처럼 사용
// key : 단어, value : 인덱스
HashMap<String, Integer> map = new
HashMap<>();
// 사전에 해당하는 인덱스
int idx = 1;
// A - Z까지의 인덱스를 map에 입력
for (char c = 'A'; c <= 'Z'; c++) {
map.put(c + "", idx++);
}
int len = msg.length();
// list에는 answer에 해당하는 색인 번호 출력
ArrayList <Integer> list = new ArrayList<>();
// msg를 단어 탐색
for (int i = 0; i < len; i++) {
// 현재 사전에서 찾을 수 있는 가장 긴 문자열 w
String now = msg.charAt(i) + "";
// 현재 문자에 다음 문자를 붙이면서 map에 들어있는지 확인한다.
// 들어있더라면 현재 now에 다음 문자를 붙여주고
// 아니라면 map에 다음 문자까지 붙여서 문자와 인덱스를 넣어준다. 반복문 종료
// 현재 인덱스가 끝일 경우도 생각해준다.
while (true) {
if (i != len - 1 && map.containsKey(now + msg.charAt(i + 1))) {
now += msg.charAt(++i);
} else if (i != len - 1) {
map.put(now + msg.charAt(i + 1) , idx++);
break;
} else break;
}
// 현재 찾은 w의 색인 번호를 리스트에 넣어준다.
list.add(map.get(now));
}
// 리스트에 값들을 answer 배열에 넣어준다.
int answerIdx = 0;
int[] answer = new int [list.size()];
for (Integer i : list) {
answer[answerIdx++] = i;
}
return answer;
}
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[java] 프로그래머스 - JadenCase 문자열 만들기 (0) | 2023.08.24 |
---|---|
[java] 프로그래머스 - n진수 게임 (0) | 2023.08.23 |
[java] 프로그래머스 - n^2 배열 자르기 (0) | 2023.08.16 |
[java] 프로그래머스 - k진수에서 소수 개수 구하기 (2) | 2023.08.09 |
[java] 프로그래머스 - 숫자의 표현 (0) | 2023.08.08 |