문제 설명
문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.
두 수가 n과 m이라면
">", "=" : n >= m
"<", "=" : n <= m
">", "!" : n > m
"<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.
제한 사항
1 ≤ n, m ≤ 100
나의 코드
class Solution {
public int solution(String ineq, String eq, int n, int m) {
int answer = 0;
if(ineq == "<") {
if(eq == "=") {
if(n<=m) {
answer= 1;
} else {
answer= 0;
}
} else if(eq == "!") {
if(n<m) {
answer = 1;
} else {
answer = 0;
}
}
} else if(ineq == ">") {
if(eq == "=") {
if(n>=m) {
answer = 1;
} else {
answer = 0;
}
} else if(eq == "!") {
if(n>m) {
answer = 1;
} else {
answer = 0;
}
}
}
return answer;
}
}
첫 번째 코드
class Solution {
public int solution(String ineq, String eq, int n, int m) {
int answer = 0;
if(ineq == "<" && eq == "=") {
if(n<=m) {
answer = 1;
} else {
answer = 0;
}
} if(ineq == "<" && eq == "!") {
if(n<m) {
answer = 1;
} else {
answer = 0;
}
} if (ineq == ">" && eq == "=") {
if(n>=m) {
answer = 1;
} else {
answer = 0;
} if(ineq == ">" && eq == "!") {
if(n>m) {
answer = 1;
} else {
answer = 0;
}
}
}
return answer;
}
}
두 번째 코드
class Solution {
public int solution(String ineq, String eq, int n, int m) {
int answer = 0;
if(ineq.equals("<") && eq.equals("=")) {
answer = n<=m ? 1 : 0;
} else if(ineq.equals("<") && eq.equals("!")) {
answer = n<m ? 1 : 0;
} else if(ineq.equals(">") && eq.equals("=")) {
answer = n>=m ? 1 : 0;
} else if(ineq.equals(">") && eq.equals("!")) {
answer = n>m ? 1 : 0;
}
return answer;
}
}
최종 코드
느낀 점
처음 단순히 조건 하나하나 조건문을 통해 작성했다가 &&
로 묶을 수 있겠다 싶어 묶어서 좀 더 단순하게 만들어 제출하니 통과되지 않았다.
무엇이 문젠가 찾아보니 String에서 값을 비교할 때 ==
, String.equals()
두 가지 방법이 존재한다는 것을 잊고 있었다.
String을 비교할 때 ==
로 비교하면 해당 주소값을 비교하고, String.equals()
로 비교하면 그 데이터 자체를 비교하기에 해당 문제에서는 equals()
함수로 비교하는 게 맞았다.
String 클래스안에 있는 equals라는 메서드를 사용하면
두 비교대상의 주소 값이 아닌 데이터값을 비교하기 때문에
어떻게 String을 생성하느냐에 따라 결과가 달라지지 않고 정확한 비교를 할 수 있습니다.
따라서 String을 비교할 때는 equals로 바꿔주고 삼항연산자를 사용하여 좀 더 단순한 코드로 짤 수 있었다.