본문 바로가기
알고리즘 풀이

[알고리즘] 프로그래머스 | OX퀴즈, 캐릭터의 좌표

by 째깍단 2023. 8. 1.

OX퀴즈

https://school.programmers.co.kr/learn/courses/30/lessons/120907

 

답: 

더보기
def solution(quiz):
    answer = []
    for q in quiz:
        new = q.split(" ")
        if new[1] == "+" :
            a = int(new[0]) + int(new[2])
            if a == int(new[4]):
                answer.append("O")
            else: 
                answer.append("X")
        if new[1] == "-" :
            a = int(new[0]) - int(new[2])
            if a == int(new[4]):
                answer.append("O")
            else: 
                answer.append("X")
    return answer

 

 

문제 분석 및 해석

 

'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz
수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return

***  + - 연산자만 존재함

 

풀이. 

1) split으로 공백 기준으로 나누어 새로운 list에 담음

2) 이후 index 1 에 담긴 연산자를 확인

3) 0 / 2번 인덱스를 계산하고

4) 해당 값이 유효한지 확인하여 O X를 넣도록 하였음

 

 

 


 

 

캐릭터의 좌표 

이차원배열, 너비탐색문제!

https://school.programmers.co.kr/learn/courses/30/lessons/120861


답:

더보기
def solution(keyinput, board):
    answer = [0, 0]
    가로제한 = board[0]//2 #몫 
    세로제한 = board[1]//2
    for key in keyinput:
        if key == "left" and answer[0]-1 >= - 가로제한:
            answer[0] -= 1
        elif key == "right" and answer[0]+1 <= 가로제한:
            answer[0] += 1
        elif key == "up" and answer[1]+1 <= 세로제한:
            answer[1] += 1
        elif key == "down" and answer[1]-1 >= -세로제한:
            answer[1] -= 1
    return answer

 

 

문제 분석 및 해석


up + down - [0, 뒤]
left - right + [앞, 0]
2차원 배열을 떠올리자!

 

조건

1. 캐릭터는 항상 [0,0에서 시작함]
2. board 크기가 주어짐, [가로 크기, 세로 크기] 형태, 1<= board <=99 크기 
3. board의 크기를 벗어난 방향키 입력은 무시
4. ≤ board[0] ≤ 99 

 

 

 

풀이

 

for문 첫줄에서 가로제한과 세로 제한을 먼저 점검해보려 했으나,

현재 더해져야하는 내용에 대한 오류가 생겨서 각각의 if문에서 제한 여부를 체크하도록 변경하였다.

 

 

>> 처음 풀이

def solution(keyinput, board):
    answer = [0, 0]
    가로제한 = board[0]//2
    세로제한 = board[1]//2
    for key in keyinput:
        if 가로제한 <= answer[0] or 세로제한 <= answer[1]:
            pass
        else: 
			if "left": ...

 

>> 변경한 풀이

def solution(keyinput, board):
    answer = [0, 0]
    가로제한 = board[0]//2 #몫 
    세로제한 = board[1]//2
    for key in keyinput:
        if key == "left" and answer[0]-1 >= - 가로제한:
            answer[0] -= 1