https://school.programmers.co.kr/learn/courses/30/lessons/181935
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
양의 정수 N이 매개변수로 주어질때, n이 홀수라면 n이하의 홀수인 모든 양의 정수 합을 return
n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return하는 프로그램 작성하는 문제이다.
나의 풀이는 다음과 같다. (깔끔하지 못한부분에 대해서는 아쉽다고 생각한다.. 나의 풀이능력이 아직은 부족한것이니 더 노력하는 수밖에)
if문을 사용하여 홀수인경우에는 for문을 통하여 int자료형 객체 i가 n이하만큼 반복하며
홀수(여기서 if % 2 != 0 을 사용하여 홀수를 지정하였다.)의 값들을 answer 객체에 더하는 방식이다.
짝수인경우는 else로 넘어가서 마찬가지로 for문을 통하여 n번만큼 반복하고 그안에서 짝수(i %2 == 0 으로 짝수값만 가져와서 실행)인 값들을 곱하여 제곱으로 만든값을 answer 객체에 집어넣는 방식으로 구현하였다.
정답을 적으면서도 이 방법밖에 없나.. 생각을 많이했는데 30분~ 아무리많이잡아도 40분안에는 문제를 풀어야한다고 생각하기에
그 시간안에 맞추는것을 1차목표로 잡고 나머지는 다른분들의 풀이를 보고 배우기로 한 처음의 목표대로 답안을 제출했다.
class Solution {
public int solution(int n) {
int answer = 0;
if(n % 2 != 0){
for (int i =0; i <= n; i++){
if(i % 2 != 0){
answer += i;
}
}
}else{
for (int i =0; i <= n; i++){
if(i % 2 == 0){
answer += i * i;
}
}
}
return answer;
}
}
다른 분의 풀이
int 객체 odd(홀수),짝수(jjj)를 선언후 for문을 통하여 주어진 정수 n만큼 반복하는 구간을 만든다.
그후 그 안에서 짝수인경우(i % 2 == 0) jjj객체에 i*i(제곱)의 값을 넣어주고
그 외의 경우에는 odd(홀수)객체에 i+i의 값을 넣어주는 방식으로 눈에 잘 띄도록 적어놓으셨다.
그리고 삼항연산자를 사용하여 n % 2 == 0 (짝수) 인 경우에는 jjj가 answer 객체의 값으로 들어가고 홀수인경우에는 odd값이 answer 객체의 값으로 들어가게 한후 return으로 값을 반환하는 방식이다.
class Solution {
public int solution(int n) {
int answer = 0;
int odd = 0;
int jjj = 0;
for(int i = 1; i <= n; i++){
if(i%2 == 0) jjj += i*i;
else odd += i;
}
answer = n % 2 == 0 ? jjj : odd;
return answer;
}
}
문제풀이 자체의 생각은 비슷한거같은데 나는 쓸데없이 if문을 여러번 사용하였고 for문도 같은 부분을 여러번사용하여 눈에 잘 들어오지않는 반면에 해당 문제풀이의 경우는 눈에 정말 잘 들어온다. 다음의 문제풀이때는 중복되는 부분을 최대한 없애보고 한번의 반복문안에서 값을 잘 담도록 구현해보아야겠다.
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] lv.0 조건 문자열 (0) | 2023.06.29 |
---|---|
[프로그래머스] lv.0 더 크게 합치기 (0) | 2023.06.27 |
[프로그래머스] lv.0 문자열 반복출력 (0) | 2023.06.27 |
[프로그래머스] lv.0 문자열 섞기 (0) | 2023.06.27 |
[프로그래머스] lv.0 문자열 겹쳐서 출력하기 (0) | 2023.06.23 |