Lv.0에서도 낮은 난이도부터 높은 난이도까지 프로그래머스 스쿨에서 따로 지정해 둔 순서가 있다는 것을 알게 되었다. 따라서 나머지 문제들은 그 순서대로 진행해 보기로 했다.
두 수의 합
두 수를 더하는 아주 쉬운 문제다.
얼른 신나게 적고 다른 사람의 풀이를 확인했다.
왼쪽에 주어진 제한사항을 볼 때마다, 그 부분을 내가 직접 제한해서 다른 숫자가 대입된 경우에는 결과가 안 나오게 해야 하는 것인지, 제한사항의 조건에 충족하는 범위 내에서 무조건 올바른 결과가 나오게 해야 된다는 것인지 알 수 없었는데, 이 풀이가 제일 좋아요를 많이 받은 것을 보니 제한을 해야 되는 모양이다. 다음부터는 그렇게 해야겠다.
두 수의 차
다음은 두 수의 차를 구하는, 역시 간단한 문제다.
위의 다른 풀이를 그대로 따라하기가 그래서, || (or) 연산자를 활용하는 방식으로 해 보았다.
다른 풀이를 보니, 조건식에서 변수명을 가운데로 모으고 각 변수의 조건식마다 괄호를 이용해 묶는 쪽이 가독성이 좋아 보인다. 가독성 부분은 훈련을 많이 해야 할 것 같다. 역시 다음 문제부터 적용해야겠다.
다만 위의 다른 풀이를 보면 두 조건식이 num1로 중복되어 있다. 붙여넣기를 하다가 실수했나 보다. 나 같은 초보들끼리 모여 문제를 푸니 재밌는 상황이 자주 나오는 듯하다.
두 수의 곱
역시 비슷한 문제다. 두 수의 곱을 연산하게 하면 된다.
특정 변수의 조건식마다 괄호로 묶어서 보다 가독성 있게 적어 보았다.
몫 구하기
num1을 num2로 나눈 몫을 연산하게 하는 문제다.
이번에도 || 연산자를 활용해 보았다.
다른 풀이를 보니 조건식에 포함되지 않았을 경우 -1 값을 리턴하도록 해 두었다. indexOf 메소드를 이용해 문자열의 위치를 찾을 때 해당 문자열이 포함되지 않은 경우 -1 값을 리턴하는데, 그것처럼 여기서도 해당되지 않는 경우 -1 값을 리턴하도록 해야 하는 모양이다. answer의 초기값을 0으로 하면, 조건에 포함되더라도 (정수 간의 나눗셈 연산이므로) 분모가 분자보다 크면 answer의 결과값은 0이 나오게 되어 조건에 포함되었는지의 여부를 알 수 없게 될 것이다. 정수형이 아닐 경우에는 분자가 0이거나 분모가 무한대여야만 결과값이 0(으로 수렴)이 된다. -1로 리턴하게 하는 부분은 다른 문제들을 공부하면서 알아가야 할 것 같다.
다만 -1 값을 리턴하기 위해 else 조건문을 이용하는 것보다는 answer의 초기값을 -1로 지정해 두는 방식이 보다 간결해 보인다. 이는 테스트를 시작할 때 기본적으로 주어진 값을 건드리지 말아야 하기 때문일 수도 있다.
두 수의 나눗셈
다음은 앞의 문제들보다 조금 난이도가 있는 문제다.
실수로 나눗셈 연산을 한 후 정수로 리턴하는 것이 핵심이다. answer 초기값은 -1로 바꿔 놓고 시작해 봤다.
결과는 실패...
num1과 num2 중 하나 또는 둘 다 double 또는 float의 실수형으로 바꾼 후 연산을 하면 실수 결과값이 나오게 된다(어차피 정수값으로 변환할 것이므로, 다소 정밀도가 떨어지더라도 메모리를 덜 차지하는 float으로 바꾸는 편이 더 나을 수 있다). 여기에 1,000을 곱한 후 다시 정수로 변환해야 하는데, 작성 과정에서 x를 먼저 정수로 바꾸고 연산하는 것으로 착각했다.
그렇다면, answer이 정수형이니까 그냥 변환하지 않고 곱하면 소수점 아래가 알아서 짤리고 정수값으로 변환될 수도 있지 않을까? 이 부분이 갑자기 헷갈린다.
역시 안 된다. 실수 간의 연산 결과값은 실수이므로, 바로 더 작은 허용 범위를 가지는 정수형 변수에 대입할 수는 없다. 강제 타입 변환을 통해 결과값을 정수로 변환하는 방법밖에 없다. 반대의 경우에는 따로 casting 하지 않아도 자동 타입 변환이 된다.
다급한 마음에 int에 괄호를 붙이지 않았다...... 정신적 상처가 컸던 모양이다. (tmi ㅈㅅ)
개인적으로 네 자리가 넘어가면 1,000과 같은 식으로 ,를 붙이는 것이 습관이 되어 그냥 1000이라고 적으면 어색하다. 그래서 ,를 붙여 보았다. 보통의 경우 이렇게 작은 수에 굳이 ,를 붙일 필요는 없을 것이다.
가장 많은 좋아요를 받은 풀이다. 조건식도 없이 아주 간결하게 풀었다. 아직 조건식을 내가 직접 제한해 줘야 맞는 건지 상관없는 건지 잘 모르겠다.
정수형 변환은 위처럼 return 할 때 바꿔주는 편이 더 좋아 보이기도 하다. 중간 연산을 answer을 이용해 하면 어색하기 때문에 변수명을 result로 바꿔 답까지 낸 형태이다. 대신 간결하다. 초기에 answer 변수가 따로 주어졌는데 이렇게 해도 되는 건지는 아직까지 잘 모르겠다. 많이 풀다 보면 자연히 알게 될 것이다.
어제는 두 문제 풀고 13점을 받았는데, 오늘은 5문제를 풀었는데도 6점밖에 못 받았다. 문제 난이도 간 점수 편차가 큰 모양이다.
'Coding Test' 카테고리의 다른 글
Java 코딩테스트 연습 5일차(2) (프로그래머스 스쿨 Lv.0, 1061점) (2) | 2023.03.11 |
---|---|
Java 코딩테스트 연습 5일차(1) (프로그래머스 스쿨 Lv.0, 1055점) (0) | 2023.03.11 |
Java 코딩테스트 책 구입, 연습 4일차 (프로그래머스 스쿨 Lv.0, 1045점) (0) | 2023.03.10 |
Java 코딩테스트 연습 3일차 (프로그래머스 스쿨 Lv.0, 1037점) (2) | 2023.03.09 |
Java 코딩테스트 연습 1일차 (프로그래머스 스쿨 Lv.0, 1013점) (0) | 2023.03.07 |