목차
1. 문자열 섞기
길이가 같은 두 문자열 str1과 str2가 주어집니다.
두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 return 하는 solution 함수를 완성해 주세요.
public String solution231122_1(String str1, String str2) {
// 1차
int length = str1.length(); // 길이가 같은 두 문자열이라는 조건때문에 길이라는 변수를 하나로
// char[] char1 = new char[length];
// char[] char2 = new char[length];
// for (int i = 0; i < length; i++) {
// char1[i] = str1.charAt(i);
// char2[i] = str2.charAt(i);
// }
// StringBuilder builder = new StringBuilder(char1.length + char2.length);
// for (int i = 0; i < length; i++) {
// builder.append(char1[i]).append(char2[i]);
// }
// return builder.toString();
// 2차
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append(str1.charAt(i)).append(str2.charAt(i));
}
return builder.toString();
}
- 문제에 나오는 "길이가 같은"이라는 조건 때문에 길이를 담아놓는 변수를 생성
- 1차 풀이에서는 두 개의 문자열을 각각 쪼개어 배열에 담은 후 StringBuilder에 추가하는 형식으로 코드를 진행
- 2차 풀이에서는 배열의 필요성이 사라져서 StringBuilder에 바로 String 클래스의 charAt 함수를 사용해서 str1과 str2를 추가
2. 문자 리스트를 문자열로 변환하기
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
public String solution231122_2(String[] arr) {
// 1차
// StringBuilder sb = new StringBuilder();
// for (String s : arr) {
// sb.append(s);
// }
// return sb.toString();
// 2차
return String.join("", arr);
}
- 가장 처음 떠오르는 방법으로 "이어붙인다"의 목적으로 StringBuilder를 사용해서 1차 풀이
- 다른 풀이보기에서 join("추가할 문자", "리스트")이라는 String의 내장함수를 알게 되어 2차 풀이 수정
3. 문자열 곱하기
문자열 my_string 과 정수 k 가 주어질 때, my_string을 k 번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.
public String solution231122_3(String my_string, int k) {
return my_string.repeat(k);
}
- 바로 어제의 나였다면 for문을 사용해서 당당하게 1차 풀이를 진행했겠지만, 이미 경험했던 String의 내장함수 repeat를 사용해서 간단하게 완료!
4. 더 크게 합치기
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a 와 b 가 주어졌을 때, a ⊕ b 와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.
단, a ⊕ b 와 b ⊕ a 가 같다면 a ⊕ b 를 return 합니다.
public int solution231122_4(int a, int b) {
// 1차
// int frontA = Integer.parseInt(String.valueOf(a) + String.valueOf(b));
// int backA = Integer.parseInt(String.valueOf(b) + String.valueOf(a));
// return Math.max(frontA, backA);
// 2차
return Math.max(Integer.parseInt(a + "" + b), Integer.parseInt(b + "" + a));
}
- 정수를 붙여쓰기 위해 문자열로 변환하여 a + b, b + a 두 개의 변수 생성
- Math의 최댓값 찾기 함수를 사용해서 비교 후 return
- 2차 풀이에서는 자바의 특성 정수 + 문자열 = 문자열을 이용하여 변수 없이 max 함수를 바로 return
5. 두 수의 연산값 비교하기
연산 ⊕ 는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a 와 b 가 주어졌을 때, a ⊕ b 와 2 * a * b 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.
단, a ⊕ b 와 2 * a * b 가 같으면 a ⊕ b 를 return 합니다.
public int solution231122_5(int a, int b) {
// 1차
// int result = Integer.parseInt(a + "" + b);
// int compare = 2 * a * b;
// return Math.max(result, compare);
// 2차
return Math.max(Integer.parseInt(a + "" + b), 2 * a * b);
}
- 두 결과값 정수를 비교하기 위해 연산으로 붙여 쓴 변수와, 2 * a * b의 변수 생성
- 1차 풀이에서는 각 변수에 담아두는 불필요한 과정이 있음
- 4번 문제와 동일하게 max 함수를 사용해서 return
- 2차 풀이에서는 변수를 사용하지 않고 인수로 받은 a 와 b를 바로 max 함수의 인수로써 연산에 바로 사용
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
[기초 Day8] 주사위 게임 3 (2) | 2023.11.29 |
---|---|
[기초 Day7] 배열 만들기 2 (1) | 2023.11.28 |