본문 바로가기

old/Algorithm Solving

LeetCode 2011. Final Value of Variable After Performing Operations 자바 문제 풀이

반응형

문제

Final Value of Variable After Performing Operations - LeetCode

문제 해결 방법

  • 전위연산자와 후위연산자를 주는것은 함정입니다.
  • 이 문제는 스트링을 비교하는것과 숫자를 비교하는데 차이점을 알고 있느냐고 묻는 문제입니다.
  • 하지만 이와 동시에 여러가지 최적화할 여지를 남겨두었기에 유저가 최적화를 얼마나 할수 있는지, 논리적으로 얼마나 할수있는지 시험하는 문제이기도 합니다.
  • 기본적으로 자바에서 스트링을 비교할떄는 반드시 equal을 써야합니다.
  • 문제에서는 피라미터가 반드시 "++X", "X++", "--X", or "X--" 중 하나라고 말했기 때문에 굳이 equalsIgnoreCase같은 메서드를 사용할 필요가 없다.
  • 여기서 조금더 최적화를 하자면, 전부 비교를 할 필요가 없이 두번째 글자가 ‘+’인지 ‘-’인지 구분만 하면 더할지 뺼지 구분할수 있다.
  • 아주 단순한 if문이기 떄문에 물음표 연산자로 더욱 코드를 줄일수 있다.
  • 자바의 물음표 연산자(?:)란
  • 물음표 연산자를 사용할경우, 비교하는것은 char 타입이기 떄문에, 이는 equal메서드를 사용할 필요가 없습니다. char은 primitive type이고, String은 reference type이기 때문입니다.
  • 자바의 Primitive 데이터 타입과 Reference 데이터 타입

Github Link

https://github.com/eunhanlee/LeetCode_2011_FinalValueofVariableAfterPerformingOperations_Solution.git

시간복잡도: O(n), 공간복잡도: O(1)

/**
 * 연산들을 수행한 후 최종 결과값을 계산합니다.
 *
 * @param operations 수행할 연산들을 나타내는 문자열 배열입니다.
 *                   각 문자열은 단일 문자 ('+' 또는 '-') 다음에 'X'가 오는 형태입니다.
 * @return 연산을 수행한 후의 최종 결과값입니다. '+' 연산에 대해 1을 더하고 '-' 연산에 대해 1을 뺀 값을 계산하여 반환합니다.
 */
public int finalValueAfterOperations(String[] operations) {
    int result = 0;

    for (String str : operations) {
        // 문자열의 두 번째 문자를 확인하여 연산 유형을 판별합니다.
        // '+'인 경우 결과값에 1을 더하고, 그 외의 경우에는 1을 빼줍니다.
        result += str.charAt(1) == '+' ? 1 : -1;
    }

    return result;
}
반응형