2023-08-29 TIL (삼항 조건 연산자와 제곱근 함수)
code kata
첫 문제였던 문자열을 정수로 바꾸는 문제는 처음에 for문을 사용해서 배열로 만들고 숫자로 형변환을 하여 출력을 해야하나 싶었어서 형변환 이후 배열로 작성하려고 문제를 계속 보던 찰나, 생각보다 간단하게 풀 수 있을 것 같아서 작성하던 줄을 지우고 최대한 가볍게 작성해보고 머릿속으로 계산해 보았을 때, 큰 문제가 없어서 제출했더니 정말 정답이었다 ㅋㅋ
public class Solution {
public int solution(string s)
{
int answer = int.Parse(s);
return answer;
}
}
정말 문제 설명 그대로 문자열 s를 숫자로 변환하여 출력만 하면 되기 때문에... 문자열 s를 재배열할 필요 없이 있는 그대로를 숫자로만 바꿔주면 되는 부분이었다
int.Parse를 사용하여 string 형태인 s를 형변환만 시켜주면 끝...
심지어 다른사람 풀이를 봤는데 이게 정말 정답이었다ㅋㅋㅋ 조금은 황당한....
그리고 두 번째 문제가 조금 어려웠는데,
정수 제곱근을 판별하는 문제로 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하는 것이다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 것
예를 들면 n이 121이면 11의 제곱이므로 11+1을 제곱한 144를 리턴하고, n 이 3이면 제곱이 아니므로 -1을 리턴하는 것이다.
이 문제를 풀려면 제곱과 관련된 산술연산자를 찾거나 함수를 찾아서 활용해야 하는데, 처음에는 Math.Pow 를 사용해보려 했으나 괄호안에 넣어야 하는 숫자에 대해 고민하다가 이 방법이 아닌 것 같아서 다른 함수를 찾아보았는데 Math.Sqrt 라는 함수가 있었다. 하지만 이것을 어떻게 사용하면 좋을지 감이 잡히지 않아서 결국 다른 사람의 풀이를 참고하였다.
using System;
public class Solution {
public long Solution(long n) {
long x = (long)Math.Sqrt(n);
return (x*x == n) ? (x+1)*(x+1) : -1;
}
}
여기서 눈여결 볼 부분은 마지막 줄인데,
return (x*x == n) ? (x+1)*(x+1) : -1;
이 부분은 '삼항 조건 연산자'로
x*x == n 은 'x'의 제곱이 'n'과 같은지를 확인하는 조건이고,
조건이 참이면 '(x+1)*(x+1)'이 반환되고 그렇지 않으면 -1을 반환하는 구조이다.
※ 오늘의 키워드
- 생각보다 간단한 코드로도 로직이 구현이 가능하다는 것
- 삼항 조건 연산자 : ( ) ? ( ) : ( );
- Math.Sqrt() : 괄호안의 숫자를 인자로 받으며 제곱근을 반환하는 함수