2023-04-03 TIL

0v0baek·2023년 4월 3일
0

TIL

목록 보기
20/92

점의 위치 구하기

문제

x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
좌표가 속하는 사분면을 return (1사분면이면 1...)

풀이 중 발생한 문제

answer = 1 if dot[1] > 0 else answer = 4

이렇게 치니 SyntaxError: cannot assign to conditional expression오류가 발생했다.

검색해보니 문법적인 문제였다.

answer = 1 if dot[1] > 0 else 4

같은 변수면 answer = 이걸 붙여줄 필요가 없다.

내 풀이

def solution(dot):
    if dot[0] > 0:
        answer = 1 if dot[1] > 0 else 4
    if dot[0] < 0:
        answer = 2 if dot[1] > 0 else 3
    return answer

if문으로 첫번째 분기를 나누고, 그 다음 또 if 문으로 한 번 더 분기를 나눠주는 식이다.

다른 사람의 풀이

def solution(dot):
    quad = [(3,2),(4,1)]
    return quad[dot[0] > 0][dot[1] > 0]

우선 답이 될 숫자들을 튜플로 두 개씩 묶고, 두 개의 튜플을 다시 리스트로 묶어줬다.
그런 뒤 리스트 안의 요소들의 값을 비교해 해당하는 경우의 답안 값을 return 해주는 방식이다.

리스트와 딕셔너리는 정말 잘만 활용하면 깔끔하고 직관적으로 코드를 짤 수 있는 효자같은 녀석이란 생각이 든다.

문자열 정렬하기(1)

문제

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성하기

내 풀이

def solution(my_string):
    answer = []
    for value in list(my_string):
        if value.isdigit() == True:
            answer.append(int(value))
        else:
            continue
    return sorted(answer)
  1. 문자열을 리스트로 받아서
  2. 리스트를 돌리면서 숫자인지 확인 (.isdigit()사용)
  3. 숫자이면 답안 리스트에 .append, 아니면 continue

다른 사람의 풀이

def solution(my_string):
    return sorted([int(c) for c in my_string if c.isdigit()])

충격 받은 것,
문자열도 for문이 돌아간다!!
그러니까 애초에 list(my_string)으로 문자열을 리스트 치환 할 필요가 없었음...

역시 내가 문제를 푸는 거에서 끝날 게 아니라 남의 코드를 보면서 와 이런식으로도 하는구나.. 하고 배우고 한 번 더 익히는 과정이 중요하다 생각된다.

profile
개발 공부 하는 비전공자 새내기. 꾸준히 합시다!

0개의 댓글