코딩테스트/프로그래머스
[프로그래머스 Lv.1] JAVA 문자열, 수 3
머밍
2024. 7. 2. 16:03
시저 암호
아스키 코드값을 직접 입력해서 구하지 않고 구현했다.
n만큼 시프트 했을때 z나 Z를 넘어가면 a와 A부터 시작하는 부분이 어려웠다. 둘다 현재 값에서 26을 빼면 다시 a나 A로 돌아갈 수 있는 점을 이용하였다.
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if( ch == ' '){
answer += ch;
continue;
}
if(Character.isLowerCase(ch)){
//알파벳 소문자 범위를 넘어가면 다시 a로 돌아가기 위해 26빼기
if(ch + n > 'z'){
answer += (char) (ch - 26 + n);
} else{
answer += (char) (ch + n);
}
} else{
if(ch + n > 'Z'){
answer += (char) (ch - 26 + n);
} else{
answer += (char) (ch + n);
}
}
}
return answer;
}
}
가장 가까운 같은 글자
현재 문자인 i의 이전 인덱스들을 검사하는 이중for문으로 구현했다.
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
answer[0] = -1;
for(int i = 1; i < s.length(); i++){
for(int j = i-1; j >=0; j--){
if(s.charAt(i) == s.charAt(j)){
answer[i] = i - j;
break;
}
}
//같은 문자가 없을때
if(answer[i]==0) {
answer[i] = -1;
}
}
return answer;
}
}
- Map으로 구현
문자와 문자에 따른 인덱스를 한번에 저장할 수 있기에 구현해봤다
Map: key-value 쌍을 저장하는 자료구조
-> 특징: 데이터를 key와 value의 쌍으로 저장,각 key는 유일해야 하며, value는 key와 관련된 데이터
HashMap
-> 특징: key나 value로 null을 허용, 삽입 순서를 보장 안함
메서드
1 .put(key, value): key-value 쌍을 추가하거나 기존 key에 대한 value를 업데이트
2.get(key): 주어진 key에 대응하는 value를 반환
3. containsKey(key): 주어진 key가 Map에 존재하는지 여부를 반환
import java.util.Map;
import java.util.HashMap;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
// s의 문자와 index를 담을 map 선언(키-쌍)
Map<Character, Integer> map = new HashMap<>();
// s의 길이만큼 반복
for (int i = 0; i < s.length(); i++) {
// 현재 문자가 처음 등장함
if (!map.containsKey(s.charAt(i))) {
answer[i] = -1;
//현재 문자 위치 map에 저장
map.put(s.charAt(i), i);
} else {
// 해당 문자가 map에 이미 존재
answer[i] = i - map.get(s.charAt(i));
map.put(s.charAt(i), i);
}
}
return answer;
}
}
숫자 문자열과 영단어
인덱스로 접근해서 구해야지라고 생각해서 포함하면 바꾸자까지는 갔는데 구체적으로 저 인덱스 i를 문자열로 대체하는 건 생각하지 못해 구글링의 도움을 받았다.
arr 배열 적을때 0부터 아무생각없이 zero부터 적었는데 앞으로는 생각을 좀 더 해야겠다.
class Solution {
public int solution(String s) {
String[] arr = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0;i<arr.length;i++){
if(s.contains(arr[i])){
s= s.replace(arr[i],Integer.toString(i));
}
}
int answer = 0;
return Integer.parseInt(s);
}
}
두 개 뽑아서 더하기