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
알고리즘
- String을 모두 한 글자씩 배열에 저장(공백 포함)
- 단어 카운트 변수는 공백을 만나면 초기화
- 단어 카운트 변수대로 짝수면 소문자, 홀수면 대문자로 변환하여 저장
- 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
알고리즘
- StringBuilder 변수에 n%3 값을 차례로 저장하면, 자동으로 앞뒤 반전된 3진법 형식으로 저장
- 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