반응형
6. 숫자의 표현
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1; i<=n; i++){
int sum = 0;
for(int j=i; j<=n; j++){
sum += j;
if(sum == n){
answer++;
break;
} else if(sum > n){
break;
}
}
}
return answer;
}
}
<작성한 코드>
두 개의 for문을 사용했다. 첫 번째 for문에서는 i는 1부터 n까지 범위를 지정해 주고 합을 저장할 변수 sum을 만들어줬다. 두 번째 for문에서는 j부터 n까지 sum에 더해가며 n과 같을 때까지 더한다. 만약 n과 일치하게 되면 answer에 1을 더하고 반복문을 종료한다. 만약 sum이 더 커져버린다면 더하지 않고 반복문을 종료시켰다. 그 뒤 answer을 반환했다.
7. 다음 큰 숫자
class Solution {
public int solution(int n) {
int answer = 0;
int nCnt = 0;
String strN = Integer.toBinaryString(n);
for(int i=0; i<strN.length(); i++){
if(strN.charAt(i) == '1') nCnt++;
}
for(int i=n+1; i<=1000000; i++){
int iCnt = 0;
String strI = Integer.toBinaryString(i);
for(int j=0; j<strI.length(); j++){
if(strI.charAt(j) == '1') iCnt++;
}
if(nCnt == iCnt){
answer = i;
break;
}
}
return answer;
}
}
<작성한 코드>
정답으로 제출할 변수 answer과 정수 n을 이진수로 변환했을 때 1의 개수를 담을 변수 nCnt를 선언했다. 그 뒤 Integer.toBinaryString(n)을 사용해서 n을 이진법으로 변환했다. 그 뒤 for문을 사용해서 strN의 1의 개수를 구했다. 다음으로는 n+1부터 조건에 나온 100000 이하의 수를 반복시키며 nCnt와 값이 같은, 즉 1의 개수가 같은 값을 찾아줬다. 그 뒤 answer에 i를 넣고 반복문을 종료했다. 마지막으로 answer을 반환해 줬다.
8. 피보나치 수
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
int[] fibo = new int[1000001];
fibo[0] = 0;
fibo[1] = 1;
for(int i=2; i<=n; i++){
fibo[i] = (fibo[i-1] + fibo[i-2]) % 1234567;
}
answer = fibo[n];
return answer;
}
}
<작성한 코드>
정수형 배열 fibo를 만들어 크기를 1000001개로 지정해 줬다. 그 뒤 fibo [0]에는 0, fibo [1]에는 1을 대입해 줬다. 다음은 for문을 사용해서 2부터 n까지 fibo [i]에 fibo [i-1] + fibo [i-2]를 1234567로 나눈 나머지값을 넣어줬다. 그 뒤 fibo [n]의 값을 answer에 넣어주고 반환하였다.
반응형
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
남건욱's 공부기록