Develop growth diary/JAVA 연습문제 풀이

프로그래머스 스쿨 연습문제 문제풀이 - Java #2

pponyo 2022. 10. 21. 16:32
728x90
반응형

목표는 1일 1블로그를 필수로 작성하는 것이었지만 실천하기가 생각보다 쉽지 않았다...😂

원래는 오후 자습시간에 오전 수업 내용을 복습하고, 수업을 마친 후에 오후 수업 내용을 복습하는 루틴이었는데

요즘 자습시간에 예제 푸느라 남는 시간이 없어서 한꺼번에 다 하려니 무리가 있었다ㅎㅎㅎ 껄껄~

 

조금 힘들더라도 빠짐없이 공부한 내용을 복습할 겸 기록하기 위해 조금 더 힘을 내보기로!


제곱수 판별하기
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하는 solution 함수를 완성해주세요.
(제한사항 : 1 ≤ n ≤ 1,000,000

 

제곱근을 구하는 Math.sqrt()를 이용해서 매개변수 n의 제곱근을 int 타입 변수 root에 할당해주었다.

어떤 자연수를 곱했을 때 나오는 제곱수를 n이라고 하였으므로 제곱근을 int 타입으로 강제 타입 변환 해주었다.

(Math.sqrt()의 결과값은 double 타입)

 

제곱근*제곱근이 n과 같다면 n이 제곱수이므로 answer에는 1을 대입,

아니라면 answer에 2를 대입하는 조건문을 완성하여 answer 값을 반환해주면 끝 :)

 

예를 들어 18의 제곱근은 3√2이므로 int형으로 강제 타입 변환을 하면 소수부분인 √2를 버려 3이 된다.

3*3 = 9 이므로 18은 3의 제곱근이 아니고, answer에는 2를 대입해주는 것이다.

반대로 16의 제곱근은 4, 4*4 = 16이므로 16은 4의 제곱수이고, answer에는 1을 대입해준다.

짝수는 싫어
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
(제한사항 : 1 ≤ n ≤ 100)

 

먼저 1부터 매개변수 n이하의 정수를 담는 배열 arr를 생성해주고, 배열의 길이는 n+1으로 할당하였다.

배열의 길이가 n+1인 이유는 1부터 n이하의 정수이므로 n을 포함하기 때문이다.

 

그리고 n이하의 홀수를 담는 배열 lastArr를 생성해주고, 배열의 최대 길이가 arr의 길이와 같도록 할당하였다.

(반복문을 통해 arr배열의 원소를 lastArr의 원소에 할당해 줄 것이기 때문)

 마지막으로 anwer배열의 index로 활용될 arrIndex를 선언해주었다.

(증감식의 누적값으로 사용될 것이기 때문에 초기값을 0으로 할당)

 

다음으로 arr배열에 1부터 n까지의 모든 정수를 담아주기 위해

먼저 arr배열의 인덱스 0부터 n까지 arr의 원소는 인덱스+1 의 값을 할당해준다.

(인덱스+1의 값을 담는 이유는 배열 arr의 인덱스가 0부터 시작하여 n-1까지이기 때문이다.

즉, 인덱스에 1을 더해준 값이 1부터 n까지의 값이 된다.)

 

그리고 만약 할당된 값을 2로 나누었을 때 나머지가 0이 아니라면 홀수인 것을 활용하여

lastArr의 arrIndex에 arr의 원소값을 할당해주고, arrIndex은 1씩 증감하도록 조건문을 사용하였다.

(arrIndex의 초기값이 0이므로 lastArr의 최초 인덱스 값을 0으로 한다.)

여기서 증감된 arrIndex의 값은 반환될 배열 answer의 길이와 같다.

 

마지막으로 last 배열의 인덱스 0부터 arrIndex까지의 원소를

lanswer 배열의 인덱스 0부터 arrIndex까지의 원소에 할당하도록 반복문을 사용하면

answer 배열은 1부터 n이하의 홀수만을 담는 배열로 완성된다.

 

약수 구하기

 

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
(제한사항 : 1 ≤ n ≤ 10,000)

 

먼저 위의 문제와 같이 매개변수 n까지의 값을 나열하는 배열 arr를 정의하고, arr의 길이는 n으로 할당해준다.

그리고 n의 약수를 담는 배열 solArr를 정의하고, solArr의 최대 길이가 arr의 길이와 같도록 할당해주었다.

마지막으로 반환하는 answer 배열의 인덱스로 사용될 ansIndex를 선언해주었다.

 

다음으로 인덱스 0부터 n까지 인덱스+1의 값을 담아주는 반복문을 사용하였다.

정수 n의 약수는 n을 어떤 정수로 나누었을 때 나머지가 0이 되는 수이므로

반복문 내에서 n을 arr[i]로 나누었을때 0이 된다면 solArr의 ansIndex값은 arr[i]가 되도록 해주고,

ansIndex를 1씩 증감시켜주는 조건문을 사용하였다.

여기서 n의 약수 개수만큼 증감된 ansIndex가 answer 배열의 크기가 된다.

 

마지막으로 answer 배열에 solArr에 담긴 n의 약수 값을 담아주기 위해서

인덱스 0부터 ansIndex까지 answer 배열에 solArr 배열의 원소를 대입해주는 반복문을 사용하였다.

 

배열의 유사도
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

[제한사항]
● 1 ≤ s1, s2의 길이 ≤ 100
● 1 ≤ s1, s2의 원소의 길이 ≤ 10
● s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다.
● s1과 s2는 각각 중복된 원소를 갖지않습니다.

배열 s1과 배열 s2의 원소를 비교하기 위해 향상된 for문을 이중으로 사용하여

변수 a, b는 각각 s1과 s2의 원소를 참조하도록 하였다.

 

그리고 eqals()메소드를 이용해 a와 b의 원소가 서로 같은지 비교하여

a와 b가 같으면 answer을 1씩 증감하도록  조건문을 사용하면

answer은 a와 b의 원소가 서로 같은 개수를 반환한다. 

 

int 타입의 배열은 각 원소를 값으로써 직접 비교하는 것이 가능하지만

String 타입의 배열은 각 원소를 직접 비교하면 원소의 값이 아닌 참조값을 비교하게 되므로

향상된 for문과 equlas() 메소드를 활용하면 쉽게 비교할 수 있다.

 

배열 자르기
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return하도록 solution 함수를 완성해보세요.

[제한사항]
● 0 < numbers의 길이 ≤ 100
● 0  ≤ numbers의 길이 ≤ 1,000
● 0 < num1 < num2 < numbers의 길이

 

먼저 배열의 인덱스 num1부터 인덱스 num2까지의 길이를 갖는 변수 size를 선언해준다.

size는 원소의 개수이므로 num2 - num1 + 1의 값을 할당해주고, size는 answer 배열의 길이와 같다.

 

다음으로 numbers 배열의 인덱스 num1부터 인덱스 num2까지의 원소를 대입해주기 위해

answer 배열은 인덱스를 0부터 1씩 증감시키고,

numbers 배열은 인덱스 num1부터 num2와 같을때까지 반복해주는 반복문을 사용하였다.

 

이 때 answer 배열의 길이를 size로 할당해주었기 때문에

반복문에서 j는 size보다 작을때까지만 인덱스가 1씩 증감하게 되고,

numbers 배열의 인덱스 num1부터 num2의 개수(size)만큼 answer 배열에 대입할 수 있다.

728x90
반응형