프로그래머스 코딩테스트 입문 0단계 문제입니다
https://school.programmers.co.kr/learn/courses/30/lessons/120909
📢 문제 설명
⭕ 정답 코드
class Solution {
public int solution(int n) {
return (n % Math.sqrt(n) == 0) ? 1 : 2;
}
}
🔍 해설
Math.sqrt()메서드: 제곱근을 구해주는 메서드
①: Math.sqrt()로 n의 제곱근을 구해준다
②: n으로 나눈 나머지 값이 0이라면
③: 1을 반환, 아니라면 2를 반환해준다
⚠️ 직접 풀어본 처음 풀이
1) Math.pow() 메서드 사용
class Solution {
public int solution(int n) {
return (int)Math.pow( (int)Math.pow(n, 0.5) , 2 )==n ? 1 : 2;
}
}
🔍 해설
Math.pow()메서드를 중첩, 삼항연산자 사용
①: 내부에 있는 메서드는 주어진 숫자를 0.5(2분의 1) 제곱하여 int로 형변환
❓ 왜 형변환을 해줘야하나요?
▶️ 형변환을 해주지 않으면 제곱수가 아닌 경우 소수점 아래로 많은 숫자가 붙게 됩니다. 여기서 제곱을 해주면 컴파일러가 제곱을 했을때 n과 매우 가까운 숫자가 나와서 n이 아닌데도 n으로 처리합니다. 그래서 형변환으로 많은 소수자리들을 없애주어야 정확한 값이 나오게 됩니다.
②: 외부에 있는 메서드에서 ①에서 구한 값으로 제곱하여 int로 형변환
③: 삼항연산자로 ②의 값과 n과 비교하여 값반환
2) 1000번 반복하기
class Solution {
public int solution(int n) {
int answer = 2;
for(int i = 1; i<=1000; i++)
if(i*i == n) answer = 1;
return answer;
}
}
🔍 해설
①: answer의 초기값을 2로 설정
❓ 왜 초기값이 2인가요?
▶️ 제곱수가 아니라면 조건문 안의 명령문까지 도달하지 않기 때문에 값이 변하지 않습니다. 그래서 코드의 효율성을 위해 2로 설정합니다.
②: 제한사항에 따라 1부터 1000(제곱하면 1,000,000인 수)까지 반복
③: 제곱했을때 n이면 answer의 값을 1로 바꾼다
📒 기억하고 갈 문법
Math.pow(제곱할 수, 지수) : '제곱할 수'를 '지수'만큼 제곱해주는 메서드
Math.sqrt(숫자) : '숫자'의 제곱근을 구해주는 메서드
Math.pow(12, 2); //144
Math.pow(144, 0.5); //12
Math.sqrt(144); //12
'코딩테스트 스터디' 카테고리의 다른 글
코딩테스트 연습 - 문자열안에 문자열 (JAVA) (0) | 2023.01.12 |
---|---|
코딩테스트 연습 - 문자열 정렬하기 (2) (JAVA) (0) | 2023.01.11 |
코딩테스트 연습 - n의 배수 고르기 (JAVA) (0) | 2023.01.06 |
코딩테스트 연습 - 약수 구하기 (JAVA) (0) | 2023.01.06 |
코딩테스트 연습 - 7의 개수 (JAVA) (0) | 2023.01.06 |