일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GoingBus
- 카카오
- 코테
- 자바
- 월간코드챌린지
- 코딩테스트
- 리눅스마스터 3과목
- 자바스크립트 코딩의 기술
- 리눅스
- 스프링 컨테이너
- 리눅스마스터 1급 정리
- 스프링 빈
- Kotlin
- 프로그래머스
- 고잉버스
- java 백준 1차원 배열
- Linux
- toCharArray
- Java
- 백준 javascript
- 리눅스마스터1급
- 문자열
- 명령어
- Memoir
- map
- 연습문제
- 개발자 회고록
- JavaScript
- 반복문
- 백준 java
- Today
- Total
hoon's bLog
[Java] 프로그래머스 정수 제곱근 판별 자바 본문
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12934
[문제 설명]
[제한 조건]
- n은 1이상, 50,000,000,000,000 이하인 양의 정수입니다.
[입출력 예]
n | return |
121 | 144 |
3 | -1 |
[먼저 생각해 보기]
지난 포스팅의 정수 내림차순으로 배치하기와 비슷한 맥락이다.
물론 이번엔 수학적인 접근이 더 좋아 보인다!
[나의 풀이]
class Solution {
public long solution(long n) {
long answer = 0;
if (Math.floor(Math.sqrt(n)) < Math.sqrt(n))
answer = -1;
else
answer = (long) Math.pow((long) Math.sqrt(n) + 1, 2);
return answer;
}
}
정수의 범위를 고려하여 역시 long return!
Java의 Math 클래스를 이용하여 제곱근 판단 및 자릿수 조절하여 연산!
위 코드에서는 floor, sqrt, pow 메서드를 사용했다!
Math 클래스를 이용하여 다양한 수학 연산들을 사용할 수 있다.
아래 표는 흔히 쓰이는 Math 클래스의 메서드들을 정리해 보았다.
(위 코드에서 사용한 메서드는 볼드체로 표시!)
static 타입 메소드명(타입 parameter, ...) | 설명 |
static double random() | 0.0 이상 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환함. |
static double abs(double a) static double abs(float a) static double abs(int a) static double abs(long a) |
전달된 값이 음수이면 그 값의 절댓값을 반환하며, 전달된 값이 양수이면 인수를 그대로 반환함. |
static double ceil(double a) | 전달된 double형 값의 소수 부분이 존재하면 소수 부분을 무조건 올리고 반환함. |
static double floor(double a) | 전달된 double형 값의 소수 부분이 존재하면 소수 부분을 무조건 버리고 반환함. |
static long round(double a) static int round(float a) |
전달된 값을 소수점 첫째 자리에서 반올림한 정수를 반환함. |
static double rint(double a) | 전달된 double형 값과 가장 가까운 정수값을 double형으로 반환함. |
static double max(double a, double b) static float max(float a, float b) static long max(long a, long b) static int max(int a, int b) |
전달된 두 값을 비교하여 큰 값을 반환함. |
static double min(double a, double b) static float min(float a, float b) static long min(long a, long b) static int min(int a, int b) |
전달된 두 값을 비교하여 작은 값을 반환함. |
static double pow(double a, double b) | 전달된 두 개의 double형 값을 가지고 제곱 연산을 수행하여, ab을 반환함. |
static double sqrt(double a) | 전달된 double형 값의 제곱근 값을 반환함. |
static double sin(double a) static double cos(double a) static double tan(double a) |
전달된 double형 값에 해당하는 각각의 삼각 함숫값을 반환함. |
static double toDegrees(double angrad) | 호도법의 라디안 값을 대략적인 육십분법의 각도 값으로 변환함. |
static double toRaidans(double angdeg) | 육십분법의 각도 값을 대략적인 호도법의 라디안 값으로 변환함. |
[다른 사람들의 풀이]
class Solution {
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
}
접근법은 내 방식과 같으나 처리하는 표현법이 기가 막히다...
애초에 if문을 통해 제곱수 여부를 확인한 후,
해당 숫자를 제곱연산하여 return 하고 그렇지 않을 때는 바로 -1 retrun...
같은 풀이지만 센스에 박수를 친다...
[정리]
개인 피셜 난이도 : ★☆☆☆☆
실무에서 종종 '왜 이렇게 어렵게 생각하냐?' 라는 말을 듣는다.
이 말인즉슨 쉬운 방법이 있음에도 혼자 어렵게 생각하여 로직이 복잡해짐을 의미한다.
물론 내가 풀이한 방식도 맞지만, 다른 사람의 풀이를 통해 더 간단하게 표현할 수 있음을 배웠다.
.... 아직도 갈길이 멀다.....
아 그리고 추가로, 난이도 한 개도 아까울 만큼 쉬워서 포스팅 건너뛴 문제들도 있다.
그런 문제들은 아래 내 github에서 검색하여 소스 참고하면 되겠다!
https://github.com/chrishoonS/codeTest
언제나 새로운 정보 공유와 잘못된 정보
비판/지적/태클은 환영입니다!
끝.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
Java 프로그래머스 하샤드 수 자바 (1) | 2023.02.15 |
---|---|
Java 프로그래머스 제일 작은 수 제거하기 자바 (0) | 2023.02.09 |
Java 프로그래머스 정수 내림차순으로 배치하기 자바 (4) | 2023.02.07 |
Java 프로그래머스 자연수 뒤집어 배열로 만들기 자바 (2) | 2023.02.06 |
[Java] 프로그래머스 문자열 내림차순으로 배치하기 자바 (4) | 2023.02.01 |