Programmers/Java

[Programmers Lv.1][자연수 뒤집어 배열로 만들기, 시저 암호, 이상한 문자 만들기, 3진법 뒤집기][java]

sseni 2023. 5. 10. 14:11
728x90
자연수 뒤집어 배열로 만들기 

https://school.programmers.co.kr/learn/courses/30/lessons/12932

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

알고리즘
  • n → String 변환 → reverse → int 변환
  • StringBuilder 이용
// 1번
public int[] solution(long n) {
        String s = String.valueOf(n);  // n을 String 으로 변환
        int[] answer = new int[s.length()];  // n의 자릿수만큼 answer 배열 크기 지정
        int idx = 0;  // answer 에 거꾸로 저장하기 위한 추가 index 변수 선언

        // 역순으로 저장하기 위한 for 문
        for (int i = s.length()-1; i >= 0; i--) {
            answer[idx++] = Integer.parseInt(s.substring(i, i+1)); // substring 으로 한 글자씩 잘라 int 형으로 변환 후 answer 에 저장
        }
        return answer;
    }

// 2번
public int[] solution(long n) {
        StringBuilder sb = new StringBuilder(String.valueOf(n)).reverse();
        int[] answer = new int[sb.length()];
        for(int i=0; i<sb.length(); i++){
            answer[i] = Integer.parseInt(sb.substring(i, i+1));
        }
        return answer;
}


시저 암호

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

public String solution(String s, int n) {
        String answer = "";
        for (int i = 0; i < s.length(); i++) {
            if (s.substring(i, i + 1).equals(" ")) answer += " ";
            else {
                char c = s.charAt(i);
                if ((Character.isUpperCase(c) && c + n > 90) ||
                        (Character.isLowerCase(c) && c + n > 122)) {
                    answer += (char) (c + n - 26);
                } else answer += (char) (s.charAt(i) + n);
            }
        }
        return answer;
    }


이상한 문자 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12930

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

알고리즘
  1. String을 모두 한 글자씩 배열에 저장(공백 포함)
  2. 단어 카운트 변수는 공백을 만나면 초기화
  3. 단어 카운트 변수대로 짝수면 소문자, 홀수면 대문자로 변환하여 저장

 

  • 2중 for문은 손해다.
  • 단어별로 저장하는 것보다 그냥 한 단어씩 탐색하는 것이 빠름

public String solution(String s) {
        String answer = "";
        String[] strArray = s.split("");  // "  abc  bc d" -> [ ,  , a, b, c,  ,  , b, c,  , d]

        int cnt = 0;  // 단어 개수 카운트할 변수 -> 위 예시에서 0, 0, 1, 2, 3, 0, 0, 1, 2, 0, 1 순으로 변화
        for(String str : strArray){
            if(str.equals(" ")) {  // 해당하는 값이 공백이라면
                cnt = 0;  // 단어 개수 카운트 변수 0으로 초기화
                answer += str;  // answer 에 공백 저장
            } 
            // 공백이 아닌 알파벳이라면,
            // 먼저 단어 카운트해주고, 단어 개수가 짝수면 소문자, 홀수면 대문자로 변환하여 answer 에 저장
            else answer += ++cnt%2 == 0 ? str.toLowerCase() : str.toUpperCase();
        }
        return answer;
}


3진법 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

알고리즘
  1. StringBuilder 변수에 n%3 값을 차례로 저장하면, 자동으로 앞뒤 반전된 3진법 형식으로 저장
  2. string → int → 3진법에서 10진법으로 변환
public int solution(int n) {
        int answer = 0;
        StringBuilder sb = new StringBuilder();

        // String으로 변환하면 자동으로 앞뒤 반전된 3진법으로 저장됨 
        // sb 변화 : 0 -> 00 -> 002 -> 0021
        while (n != 0) {  
            sb.append(n % 3);  // StringBuilder 변수에 n%3 값을 추가
            n /= 3;  // n을 3 으로 나눔
        }

        int exp = 0;  // 3진법으로 변환하기 위한 지수 변수 초기화 0 -> 1 -> 2 -> 3
        for (int i = sb.length() - 1; i >= 0; i--) {  // 3진법 자릿수만큼 반복
            answer += Integer.parseInt(String.valueOf(sb.charAt(i))) * Math.pow(3, exp++);  // 한 글자를 가져와 Integer 형으로 변환 후 3진법 계산
        }
        return answer;
    }

728x90