Notice
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스
- 클래스삭제
- 비절차형 언어
- 배열오름차순정렬
- 토글기능
- 객체지향
- 함수지향
- AttributeError
- oop 4대 특성
- 타입오류
- 의존성주입
- jquery
- CORS
- nat inside
- Arrays.sort()
- 로그인기능 #
- 향상된 for문
- 마이크로서비스아키택처
- 빅오표기법
- flask
- 멀티프로세스
- 4-Way Handshake
- soild
- 객체지향 5대 특징
- MSA
- 클래스추가
- 회원가입기능
- 분산형 아키택처
- 의존역적원칙
- 3-Way Handshake
Archives
- Today
- Total
개발하는 체대생
[코딩테스트] x만큼 간격이 있는 n개의 숫자 본문
[문제]
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
[제한 조건]
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
[풀이]
//1. for문을 n번 돌려준다.
//2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
//3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다.
나의 답안 (방법1)
class Solution {
public long[] solution(int x, int n) {
//1. for문을 n번 돌려준다.
//2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
//3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다.
long[] answer = new long[n];
for(int i=0; i < n; i++){
answer[i] = x+(long)x*i;
}
return answer;
}
}
나의 답안 (방법2)
class Solution {
public long[] solution(int x, int n) {
//방법2
// answer[i-1] = (long)(x*i); => 실패
// answer[i-1] = (long)x*i; => 괄호를 제거해주니 성공
long[] answer = new long[n];
for(int i=1; i <= n; i++){
answer[i-1] = (long)x*i;
}
return answer;
}
}
시행착오 (방법1)
class Solution {
public long[] solution(int x, int n) {
//1. for문을 n번 돌려준다.
//2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
//3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다.
// 방법1
// -> 결과값은 올바르다. 그러나 오답처리
// -> 실행속도 때문에 문제가 생긴건 아닐까??
// -> 타입이 문제??
// int 타입 "-10000000 이상, 10000000 이하인 정수" 는 해당됨
// 원인 => x*i 연산 전에 x 타입을 int 에서 long으로 바꿔줘야함.
// 이유 ?
long[] answer = new long[n];
for(int i=0; i < n; i++){
answer[i] = x+(long)x*i;
//answer[i] = x+(long)(x*i); => 실패 ?
//answer[i] = (long)(x+(x*i)); => 실패 ?
//answer[i] = (long)x+(long)x*i; => 성공
//answer[i] = (long)(x+(x*i)); => 실패 ?
//answer[i] = x+(long)x*i; => 성공
}
return answer;
}
}
이유 : x*i 의 연산이 일어나기 전에 long 타입으로 바꿔줘야지 타입 오류가 나지 않는다. 왜냐하면 1,000,000,000 이 넘는 자리 수가 담길 수 있기 때문에 int 타입으로 연산을 진행하면 오류가 난다.
회고
- 타입 확인의 중요성을 다시 한번 느꼈다.
- 문제를 다 풀었음에도 실패의 근본적인 이유을 찾아가는 과정이 흥미로웠다.
- 자바에 대한 이론적인 공부의 필요성을 느꼈다
'코딩테스트 > JAVA' 카테고리의 다른 글
[코딩테스트]프로그래머스 java 자릿수 더하기 (0) | 2023.03.21 |
---|---|
[코딩테스트] Java 부족한 금액 계산하기 (1) | 2022.09.30 |
[코딩테스트] 프로그래머스/Java(자바) 행렬의 덧셈 (1) | 2022.09.29 |
[코딩테스트] 프로그래머스/Java(자바) 핸드폰 번호 가리기 (0) | 2022.09.27 |
[코딩테스트] 프로그래머스/Java(자바) 평균 구하기 (0) | 2022.09.27 |
Comments