Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

682. Baseball Game (야구 게임) 본문

코딩 테스트/LeetCode

682. Baseball Game (야구 게임)

포카리tea 2024. 10. 31. 16:30

야구 경기의 점수를 이상한 규칙으로 유지하고 있습니다. 경기가 시작되면 빈 기록으로 시작합니다.

문자열 operations 목록이 주어지며, operations[i]는 레코드에 적용해야 하는 ith 연산이며 다음 중 하나입니다:

  • 정수 x.
    • 새로운 점수 x를 기록합니다.
  • '+'.
    • 이전 두 점수의 합인 새 점수를 기록합니다.
  • 'D'.
    • 이전 점수의 두 배에 해당하는 새 점수를 기록합니다.
  • 'C'.
    • 이전 점수를 무효화하고 레코드에서 제거합니다.

모든 연산을 적용한 후 레코드에 있는 모든 점수의 합을 반환합니다.

테스트 케이스는 답과 모든 중간 계산이 32비트 정수에 맞고 모든 연산이 유효하도록 생성됩니다.

 

 

예시 1:

입력: ops = ["5","2","C","D","+"]
출력: 30
설명:
"5" - 레코드에 5를 추가하면 레코드는 이제 [5]입니다.
"2" - 레코드에 2를 추가하면 레코드는 이제 [5, 2]입니다.
"C" - 이전 점수를 무효화하고 제거하면 기록이 [5]됩니다.
"D" - 레코드에 2 * 5 = 10을 추가하면 레코드가 [5, 10]이 됩니다.
"+" - 레코드에 5 + 10 = 15를 추가하면 이제 레코드가 [5, 10, 15]가 됩니다.
총합은 5 + 10 + 15 = 30입니다.

 

예시 2:

입력: ops = ["5","-2","4","C","D","9","+","+"]
출력: 27
설명:
"5" - 레코드에 5를 추가하면 레코드는 이제 [5]입니다.
"-2" - 레코드에 -2를 추가하면 레코드가 [5, -2]가 됩니다.
"4" - 레코드에 4를 추가하면 레코드가 [5, -2, 4]가 됩니다.
"C" - 이전 점수를 무효화하고 제거하면 기록이 [5, -2]가 됩니다.
"D" - 레코드에 2 * -2 = -4를 추가하면 레코드는 이제 [5, -2, -4]가 됩니다.
"9" - 레코드에 9를 추가하면 레코드는 이제 [5, -2, -4, 9]가 됩니다.
"+" - 레코드에 -4 + 9 = 5를 추가하면 레코드가 [5, -2, -4, 9, 5]가 됩니다.
"+" - 레코드에 9 + 5 = 14를 추가하면 이제 레코드가 [5, -2, -4, 9, 5, 14]가 됩니다.
총합은 5 + -2 + -4 + 9 + 5 + 14 = 27입니다.

 

예시 3:

입력: ops = ["1","C"]
출력: 0
설명:
"1" - 레코드에 1을 추가하면 레코드가 [1]이 됩니다.
"C" - 이전 점수를 무효화하고 제거하면 기록이 []됩니다.
레코드가 비어 있으므로 총합은 0입니다.



 

조건:

  • 1 <= operations.length <= 1000
  • operations[i]는 "C", "D", "+" 또는 [-3 * 10^4, 3 * 10^4]  범위의 정수를 나타내는 문자열입니다.
  • "+" 연산의 경우, 항상 레코드에 이전 점수가 두 개 이상 표시됩니다.
  • 연산 "C"와 "D"의 경우, 항상 기록에 이전 점수가 하나 이상 표시됩니다.

 

정답:

public class Solution {
    public int CalPoints(string[] operations) {
        int result = 0;
        List<int> resultList = new List<int>();
        
        for (int i = 0; i < operations.Length; i++)
        {
            if (operations[i] == "+")
            {
                resultList.Add(resultList[resultList.Count - 1] + resultList[resultList.Count - 2]);
            }
            else if (operations[i] == "D")
            {
                resultList.Add(resultList[resultList.Count - 1] * 2);
            }
            else if (operations[i] == "C")
            {
                resultList.RemoveAt(resultList.Count - 1);
            }
            else
            {
                resultList.Add(Int32.Parse(operations[i]));
            }
        }

        foreach (var i in resultList)
        {
            result += i;
        }

        return result;
    }
}

해설: operations 0부터 순서대로 계산을 합니다.

"+", "D", "C" 연산을 할 때에는 그 이전 배열을 이용해야하므로 resultList의 길이를 이용하여 계산합니다.

계산이 완료되면 result에 모두 더하고 return합니다.