-
TIL 2023.04.07내일배움캠프 2023. 4. 7. 19:50
이번주도 마무리가 되었습니다.
오늘은 장고 과제 제출 하는 날이어서 알고리즘 문제는 2 문제만 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120876?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
제목만 봐도 어려울 것 같았죠. 겹치는 선분의 길이
def solution(lines): for i, line in enumerate(lines, start=1): globals()['set_{}'.format(i)] = set(range(line[0], line[1])) len_1 = set_1 & set_2 len_2 = set_1 & set_3 len_3 = set_2 & set_3 all_len = len_1 | len_2 | len_3 return len(all_len)
일단 저는 이렇게 풀었습니다.
포문 아래 부분은 한 줄로 줄일 수도 있었지만 굳이 그러진 않았네요.
간략히 설명 드리자면 선분의 앞좌표와 뒤좌표까지를 리스트로 만들어 집합으로 변환하고, 집합의 특성을 이용해 교집합으로 겹치는 부분을 구해줬고, 합집합으로 합해주고 len()함수를 이용해 길이를 구했습니다.
여기서 제가 처음 알게된 문법이 사용됐는데,
for문을 돌면서 변수를 선언해주기 위해, globals() 라는 함수를 사용했습니다.
globals() 뒤의 대괄호[]안에 변수명이 들어가게 되는데, 'set_{}' 의 중괄호{}부분에 format 메소드로 받은 enumerate 한 i 값들이 들어가겠습니다. 그래서 set_1, set_2, set_3 이라는 변수가 선언 되게 되는거죠.
enumerate에 옵션으로 start 값을 주면 그 숫자부터 시작합니다.
enumerate(lines, start=1): 이렇게 쓰면 1부터 순차적으로 나오는 거죠.
다음으로 푼 문제는
https://school.programmers.co.kr/learn/courses/30/lessons/120907?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이것인데, 저는
def solution(quiz): answer = [] for i in quiz: s = i.split(" ") if s[1] == "+": a = int(s[0]) + int(s[2]) else: a = int(s[0]) - int(s[2]) if a == int(s[4]): answer.append("O") else: answer.append("X") return answer
이렇게 풀었습니다. 여기선 뭐 새로 알게된 건 없습니다.
설명드리자면 quiz로 들어온 문자열을 ' '(스페이스)를 기준으로 split으로 쪼갭니다.
그럼 리스트가 나오는데 인덱스를 이용해 1번 인덱스는 연산자가 들어가니 그 연산자가 "+" 라면 그 앞뒤 문자열을 정수로 변환해 더해주고 그게 아니면 -니까 앞 뒤 문자열을 정수로 변환해 빼주고 그 값이 마지막 인덱스를 정수로 변환한 값과 일치하면 answer에 "O" 틀리면 "X"를 append 해주는 것으로 해결했습니다.
장과 개인과제는 원래 오늘 제출이었지만 다음주 월요일로 미뤄졌습니다.
저는 다 구현하긴 했는데, 잘 한 건지는 모르겠네요.
'내일배움캠프' 카테고리의 다른 글
TIL 2023.04.10 (0) 2023.04.10 WIL 내일배움캠프 4주차 (0) 2023.04.07 장고 개인프로젝트 ERD (0) 2023.04.07 TIL 2023.04.06 (0) 2023.04.06 TIL 2023.04.05 (0) 2023.04.05