📜 문제 설명
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다.
수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
- 1 ≤ quiz의 길이 ≤ 10
- X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
- X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
- 0 ≤ X, Y ≤ 10,000
- 1 ≤ quiz의 원소의 길이 ≤ 20
- [연산자]는 + 와 - 중 하나입니다.
입출력 예
["3 - 4 = -3", "5 + 6 = 11"] | ["X", "O"] |
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"] | ["O", "O", "X", "O"] |
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120907?language=java
💡 문제 풀이
문제의 난이도 자체는 높지 않지만 은근히 잡아내기 힘든 함정이 한 가지 있어서 풀고 나서 나도 모르게 장난치나! (부산말)를 육성으로 외쳤다..
문제의 구현은 간단하다.
- 우선 split(" ") 함수를 통해 연산결과가 맞는지 확인해야 할 문자열을 리스트로 만든다.
- 만든 리스트에서 1번 인덱스는 + 또는 - 연산자이다.
- + 연산자일 경우 0번 인덱스와 2번 인덱스를 더한 값이 4번 인덱스가 맞는지 확인하고
- 연산자일 경우 0번 인덱스에서 2번 인덱스를 뺀 값이 4번 인덱스가 맞는지 확인한다 - 맞을 경우 "O", 틀릴 경우 "X"를 넣어주면 된다.
금방 풀 수 있을 줄 알았는데 함정이 한 가지 있어서 잠깐 헤맸다. 테케 한개가 계속 런타임 에러가 났다.
1번 과정에서 split 함수를 통해 리스트로 만드는데 이 때 입출력 맨 앞칸에 공백이 있어서 런타임 에러가 발생하고 다음 과정을 진행하지 못했다. (예시 : [" 3 - 4 = -3"])
제한 사항에 연산자와 숫자 사이의 공백은 항상 한 칸이라는 말만 철썩같이 믿고 당연히 맨 앞에도 불필요한 공백은 없겠거니 생각했는데 아니었다... 이렇게 가끔 편견에 갇히면 작은 함정에도 오래 헤맨다
자바 풀이
class Solution {
public String[] solution(String[] quiz) {
String[] answer = new String[quiz.length];
for (int i = 0; i < quiz.length; i++) {
// 확인해야 할 연산 결과를 배열로 만들어서 계산하기 쉽게
// ** 이 부분에서 trim 함수를 통해 공백을 제거하지 않으면 틀림
String[] tmpArray = quiz[i].trim().split(" ");
// 문자열로 되어있는 변수들을 숫자형으로 바꿔주기
int firstNum = Integer.parseInt(tmpArray[0].trim().replace(" ", ""));
int secNum = Integer.parseInt(tmpArray[2].trim().replace(" ", ""));
int resultNum = Integer.parseInt(tmpArray[4].trim().replace(" ", ""));
// 연산자, + 혹은 -
String opt = tmpArray[1].trim().replace(" ", "");
// 연산자가 +일 경우
if (opt.equals("+")) {
if (firstNum + secNum == resultNum) {
answer[i] = "O";
} else {
answer[i] = "X";
}
// 연산자가 -일 경우
} else if(opt.equals("-")) {
if (firstNum - secNum == resultNum) {
answer[i] = "O";
} else {
answer[i] = "X";
}
}
}
return answer;
}
}
파이썬 풀이
def solution(quiz):
answer = []
for i in range(len(quiz)):
# strip()을 통해 공백제거 해줘야지 통과 가능
tmp = quiz[i].strip().split(" ")
if tmp[1] == "+":
if int(tmp[0]) + int(tmp[2]) == int(tmp[4]):
answer.append("O")
else:
answer.append("X")
elif tmp[1] == "-":
if int(tmp[0]) - int(tmp[2]) == int(tmp[4]):
answer.append("O")
else:
answer.append("X")
return answer
반응형
'✨APS (Algorithm Problem Solving) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] LV.0 캐릭터의 좌표/ 자바(JAVA), 파이썬(Python) (0) | 2022.10.12 |
---|---|
[프로그래머스] LV.0 직사각형 넓이 구하기/ 자바(JAVA), 파이썬(Python) (1) | 2022.10.05 |
[프로그래머스] LV.3 최고의 집합/ 파이썬(Python) (0) | 2022.10.04 |
[프로그래머스] LV.3 순위 / 파이썬(Python) (4) | 2022.09.29 |
[프로그래머스] LV.3 정수 삼각형 / 파이썬(Python) (0) | 2022.09.28 |