250825
틀릴때마다 멘탈 바사삭...
이해안될때마다 멘탈바사삭
어려운거일수록 하기 싫어짐...
잘 못해낼꺼라는 두려움 때문에 풀기싫어짐...
잘할거라고 자신감 max로 시작해야 절반은 간다
그리고 이쁜 옷을 입어야 잘됨 문제가 잘풀림
- 이진변환 반복하기 ok
- 예산 ok
- 3진법 뒤집기 ok
- 삼총사 ok
- 이상한 문자 만들기 ok
이상한 문자 만들기
첫번째 시도
class Solution {
public String solution(String s) {
// 먼저 얘를 공백 기준으로 분리해서 배열에 넣고
String[] str = s.split(" ");
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str[i].length(); j++) {
if (j % 2 == 0) {
str[i].charAt(j) = str[i].charAt(j).UpperCase();
} else {
str[i].charAt(j) = str[i].charAt(j).LowerCase();
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length; i++) {
sb.append(str[i]);
sb.append(" ");
}
return sb.toString();
}
}
틀린 이유
str[i].charAt(j)=
- charAt(j)는 문자를 읽는 것만 가능하고, 거기에 값을 넣을 수 없음
- 문자열은 immutable이라 직접 수정 X, StringBuilder 써야 함
str[i].charAt(j).UpperCase();
- char에는 UpperCase() 같은 메서드가 없다.
- 대신 Character.toUpperCase(char) / Character.toLowerCase(char)을 써야 한다.
두번째 시도
class Solution {
public String solution(String s) {
// 먼저 얘를 공백 기준으로 분리해서 배열에 넣고
String[] str = s.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str[i].length(); j++) {
if (j % 2 == 0) {
sb.append(Character.toUpperCase(str[i].charAt(j)));
} else {
sb.append(Character.toLowerCase(str[i].charAt(j)));
}
}
sb.append(" ");
}
// 마지막 공백 제거
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
}
삼총사
class Solution {
public int solution(int[] number) {
int count = 0;
int n = number.length;
// 3종 for문으로 모든 3원소 조합 탐색
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
if (number[i] + number[j] + number[k] == 0) {
count++;
}
}
}
}
return count;
}
}
3진법 뒤집기
Integer.toString(n, 3) → 3진법 변환 메서드
class Solution {
public int solution(int n) {
// 1, 10진수를 3진수 문자열로 변환
String three = Integer.toString(n, 3);
// 2. 3진수 문자열을 뒤집기
String reversed = new StringBuilder(three).reverse().toString();
// 3. 뒤집힌 문자열을 10진수로 변환하기
int answer = Integer.parseInt(reversed, 3);
return answer;
}
}
예산
import java.util.*;
class Solution {
public int solution(int[] d, int budget) {
int answer = 0;
int sum = 0;
Arrays.sort(d);
for (int i = 0; i < d.length; i++) {
sum += d[i];
if (sum >= budget) {
break;
}
answer++;
}
return answer;
}
}
틀린 이유
- sum >= budget
- 예산 초과하면 지원불가
- >= 쓰면 예산 딱 맞춰서 쓰는 경우도 초과했다 처리되서 마지막 부서 지원 X
import java.util.*;
class Solution {
public int solution(int[] d, int budget) {
int answer = 0;
int sum = 0;
Arrays.sort(d);
for (int i = 0; i < d.length; i++) {
sum += d[i];
if (sum > budget) {
break;
}
answer++;
}
return answer;
}
}
이진변환 반복하기
- 문자열 s는 0과 1로 이루어져 있음
- 변환규칙
- 문자열에서 0을 전부 제거한다.
- 남은 문자열 길이를 2진수 문자열로 바꾼다.
- 문자열이 "1"이 될때까지 반복한다.
- 최종결과 = [변환횟수, 제거된 0의 총 개수]
class Solution {
public int[] solution(String s) {
int count = 0;
int zeroCount = 0;
while (!s.equals("1")) {
count++;
// 0 제거
int beforeLength = s.length();
s = s.replace("0", "");
int afterLength = s.length();
zeroCount += beforeLength - afterLength;
// 이진수 문자열로
int len = s.length();
s = Integer.toBinaryString(len);
}
return new int[]{count, zeroCount};
}
}