Skip to main content

250825

image.png


틀릴때마다 멘탈 바사삭...

이해안될때마다 멘탈바사삭
어려운거일수록 하기 싫어짐...

잘 못해낼꺼라는 두려움 때문에 풀기싫어짐...
잘할거라고 자신감 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();
    }
}

image.png

image.png


삼총사

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};
    }
}