[종이 접기]
https://programmers.co.kr/learn/courses/30/lessons/62049
코딩테스트 연습 - 종이접기
직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽��
programmers.co.kr
* 로직
- n번째 접었을 때 나오는 값은 맨 처음 접히는 가운데(0)을 기준으로 규칙성이 나타난다
- 왼쪽엔 이전 n-1번째 접었을 때 나오는 값
- 오른쪽엔 왼쪽에 있는 값의 보수이다
- 이를 기반으로 dp를 진행한다 (dp[1] = 0)
- n=2부터 위의 규칙대로 포문 로직을 진행해준다
class Solution {
public int[] solution(int n) {
int[] answer = {};
String[] dp = new String[n+1];
dp[1] = "0";
for(int i=2; i<=n; ++i){
StringBuilder sb = new StringBuilder(dp[i-1]);
sb.append("0");
for(int s=dp[i-1].length()-1; s>=0; --s) {
if(dp[i-1].substring(s, s+1).equals("0")) sb.append("1");
else sb.append("0");
}
dp[i] = sb.toString();
}
answer = new int[dp[n].length()];
for(int i=0; i<dp[n].length(); ++i) {
answer[i] = Integer.parseInt(dp[n].substring(i, i+1));
}
return answer;
}
}
'Algorithm > Problem_프로그래머스' 카테고리의 다른 글
프로그래머스(정수 내림차순으로 배치하기, 정수 제곱근 판별, 제일 작은 수 제거하기) - Java (2) | 2020.05.29 |
---|---|
프로그래머스(약수의 합, 이상한 문자 만들기, 자릿수 더하기, 자연수 뒤집어 배열로 만들기) - Java (0) | 2020.05.29 |
프로그래머스(수박수박수박수박수박수?, 문자열을 정수로 바꾸기, 시저 암호) - Java (0) | 2020.05.25 |
프로그래머스(서울에서 김서방 찾기, 소수 찾기) - Java (0) | 2020.05.25 |
프로그래머스(문자열 내림차순으로 배치하기, 문자열 다루기 기본) - Java (0) | 2020.05.25 |