1️⃣ 영어가 싫어요
문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers는 소문자로만 구성되어 있습니다.
- numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
- 1 ≤ numbers의 길이 ≤ 50
- "zero"는 numbers의 맨 앞에 올 수 없습니다.
입출력 예
numbers | result |
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
입출력 예 #1
- "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.
입출력 예 #1
- "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.
💻 나의 풀이
class Solution {
public long solution(String numbers) {
long answer = 0;
answer = Long.parseLong(numbers.replace("zero", "0")
.replace("one", "1")
.replace("two", "2")
.replace("three", "3")
.replace("four", "4")
.replace("five", "5")
.replace("six", "6")
.replace("seven", "7")
.replace("eight", "8")
.replace("nine", "9"));
return answer;
}
}
문제를 보고 key-value가 먼저 떠올라 hashmap을 써야하나? 싶었는데...replace 메소드를 쓰면 더 간단하지 않을까 싶어서 이런 코드가 나왔습니다.
먼저 answer가 long형이니까 parseLong() 메소드을 사용해 long형으로 다 변경해줬습니다.
그 후엔 replace() 메소드로 첫번째 자리의 문자를 두번째 문자로 변환해주고 리턴해줍니다.
하지만 이렇게 일일히 변환해주는거 말고 분명 다른 좋은 방법이 있을거 같습니다. 🙄
🔎 다른 사람의 풀이
class Solution {
public long solution(String numbers) {
String[] numbers_arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < numbers_arr.length; i++) {
numbers = numbers.replaceAll(numbers_arr[i], String.valueOf(i));
}
long answer = Long.parseLong(numbers);
return answer;
}
}
영어문자를 담을 numbes_arr 문자열 배열을 만들어준 후, for문을 사용하여 순회하면서 각 영어 단어를 해당 숫자로 대체해줍니다.
replaceAll 메서드를 사용하여 numbers_arr배열의 i번째 문자를 → String.valueOf(i) 를 사용해 문자열로 변환해줍니다.
최종적으로 대체된 문자열을 Long.parseLong() 메서드를 통해 long 타입으로 변환하여 반환합니다.
2️⃣ 인덱스 바꾸기
문제 설명
문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 < my_string의 길이 < 100
- 0 ≤ num1, num2 < my_string의 길이
- my_string은 소문자로 이루어져 있습니다.
- num1 ≠ num2
입출력 예
my_string | num1 | num2 | result |
"hello" | 1 | 2 | "hlelo" |
"I love you" | 3 | 6 | "I l veoyou" |
입출력 예 #1
- "hello"의 1번째 인덱스인 "e"와 2번째 인덱스인 "l"을 바꾸면 "hlelo"입니다.
입출력 예 #2
- "I love you"의 3번째 인덱스 "o"와 " "(공백)을 바꾸면 "I l veoyou"입니다.
💻 나의 풀이
class Solution {
public String solution(String my_string, int num1, int num2) {
String[] s = my_string.split("");
String tmp = "";
tmp = s[num1];
s[num1] = s[num2];
s[num2] = tmp;
String answer = String.join("",s);
return answer;
}
}
먼저 주어진 문자열 my_string을 split("") 메소드를 사용해서 각 문자로 분할한 후, 배열 s에 저장해줍니다.
그리고 임시 변수 tmp를 사용하여 두 인덱스 num1과 num2에 해당하는 문자를 서로 교환합니다.
마지막으로 String.join("", s) 를 사용하여 배열 s를 다시 하나의 문자열로 합칩니다. ( 배열 s의 각 요소를 공백으로 구분하여 결합한다는 뜻 )
💡 String.join()
Java에서 문자열을 결합하는 메서드입니다. 이 메서드는 문자열과 구분자를 사용하여 여러 문자열을 결합할 수 있습니다.
public static String join(CharSequence delimiter, CharSequence... elements)
- delimiter: 각 문자열 사이에 삽입할 구분자입니다.
- elements: 결합할 문자열들을 가변 인자로 받습니다.
🔎 다른 사람의 풀이
class Solution {
public String solution(String my_string, int num1, int num2) {
String answer = "";
char[] ch = my_string.toCharArray();
ch[num1] = my_string.charAt(num2);
ch[num2] = my_string.charAt(num1);
answer = String.valueOf(ch);
return answer;
}
}
3️⃣ 한 번만 등장한 문자
문제 설명
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
제한사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
입출력 예
s | result |
"abcabcadc" | "d" |
"abdc" | "abdc" |
입출력 예 #1
- "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
입출력 예 #2
- "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
💻 나의 풀이
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split("");
Arrays.sort(arr);
int a = 0;
for(int i=0; i<arr.length; i++) {
a = 0;
for(int j=0; j<arr.length; j++) {
if(arr[i].equals(arr[j])) {
a++;
}
}
if(a==1){
answer += arr[i];
}
}
return answer;
}
}
문자열 s를 split() 을 사용해 개별 문자로 나누고 arr 배열에 넣어줍니다. 그 후 sort()를 이용하여 사전 순으로 정렬해줍니다.
int a 는 문자가 몇개 나왔는지 횟수를 계산할 카운터 변수이며 초기화 해줍니다.
첫번째 for문은 정렬된 arr 배열의 각 문자를 반복하게 됩니다.
두번째 for문은 현재 문자 arr[i]의 전체 배열에서의 등장 횟수를 계산합니다. 그래서 만약 등장 횟수가 한 번 이라면 이것을 answer 문자열에 추가해줍니다.
🔎 다른 사람의 풀이
class Solution {
public String solution(String s) {
int[] alpha = new int[26];
for(char c : s.toCharArray()){
alpha[c - 'a']++;
}
StringBuilder answer = new StringBuilder();
for(int i = 0; i < 26; i++){
if(alpha[i] == 1){
answer.append((char)(i + 'a'));
}
}
return answer.toString();
}
}
int[] alpha = new int[26]; 알파벳 각각의 등장 횟수를 기록하기 위한 정수 배열을 생성합니다. 배열의 각 요소는 알파벳의 ASCII 값에 따라 매핑됩니다.
for (char c : s.toCharArray()) { alpha[c - 'a']++; } 주어진 문자열을 반복하면서 각 소문자 알파벳의 등장 횟수를 alpha 배열에 기록합니다.
StringBuilder answer = new StringBuilder(); 최종 결과를 저장하기 위한 StringBuilder를 생성합니다.
for (int i = 0; i < 26; i++) { if (alpha[i] == 1) { answer.append((char)(i + 'a')); } } 배열을 반복하면서 등장 횟수가 1인 소문자 알파벳을 answer에 추가합니다.
return answer.toString(); 최종 결과를 문자열로 변환하여 반환합니다.
4️⃣ 약수 구하기
문제 설명
정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 10,000
입출력 예
n | result |
24 | [1,2,3,4,6,8,12,24] |
29 | [1,29] |
입출력 예 #1
- 24의 약수를 오름차순으로 담은 배열 [1, 2, 3, 4, 6, 8, 12, 24]를 return합니다.
입출력 예 #2
- 29의 약수를 오름차순으로 담은 배열 [1, 29]를 return합니다.
💻 나의 풀이
import java.util.Arrays;
class Solution {
public int[] solution(int n) {
int[] answer = new int[n];
int divisor = 0;
for(int i=1; i<=n; i++) {
if(n%i == 0) {
answer[divisor++] = i;
}
}
return Arrays.copyOf(answer, divisor);
}
}
answer는 n의 약수를 저장하기 위한 배열입니다.
divisor는 현재까지 찾은 약수의 개수를 나타냅니다.
1부터 n까지 반복하면서 n을 현재 숫자로 나누어 떨어졌을 때, 해당 숫자를 answer배열에 저장하고 divisor를 증가시킵니다.
Arrays.copyOf를 사용해서 answer배열의 크기를 현재까지 찾은 약수의 개수로 조정해서 반환합니다.
🔎 다른 사람의 풀이
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int n) {
List<Integer> answer = new ArrayList<>();
for(int i=1; i<=n; i++){
if(n % i == 0){
answer.add(i);
}
}
return answer.stream().mapToInt(x -> x).toArray();
}
}
'프로그래머스 > 0단계' 카테고리의 다른 글
DAY17 문자열, 수학, 조건문, 배열, 사칙연산 (2) | 2023.12.05 |
---|---|
DAY16 문자열, 수학, 배열, 조건문 (0) | 2023.12.04 |
DAY14 조건문, 반복문, 시뮬레이션, 문자열 (0) | 2023.12.01 |
DAY13 문자열, 배열, 사칙연산, 수학, 조건문 (1) | 2023.11.30 |
DAY12 문자열, 정렬, 사칙연산, 수학 (1) | 2023.11.29 |