크래프톤정글/TIL & WIL

크래프톤정글 1주차; 문제 풀면서 참고한 것 1

jamie-lee 2022. 11. 6. 22:47

파이썬 함수 eval, exec

출처:
https://chancoding.tistory.com/185

무엇을?

eval("문자열로 된 파이썬 코드") : 문자열로 된 파이썬 코드를 실행한 값을 반환함 (return 있음)
exec("문자열로 된 파이썬 코드") : 문자열로 된 파이썬 코드를 실행만 함 (return 없음)

왜?

sum()처럼 곱셈() 같은 게 있었으면 좋을텐데… 하면서 찾다가 발견!

어떻게?

곱한값 = eval("*".join([str(n) for n in 자연수리스트]))
요런 식으로 사용함

파이썬 정규식 모듈 re 사용하기

출처: http://pythonstudy.xyz/python/article/401-정규-표현식-Regex

무엇?

  1. 정규식 (regular expression) ^743493
    1. 특징
      1. 정규 표현식, regexp, regex 라고 불림
      2. 복잡한 문자열 패턴을 정의하는 문자 표현 공식
      3. 특정한 패턴, 규칙을 가진 문자열의 집합을 추출할 수 있음(ex. 주민등록번호, 전화번호, 도서ISBN 등 패턴 있는 문자열)
      4. 문법 자체가 매우 방대 → 필요한 것 스스로 찾아서 공부!
      5. text data를 많이 다룬다면 쓸 일이 많음
      6. parsing : 정규식 등을 이용해 내가 원하는 데이터만 추출하는 것
      7. 참고자료
      8. 정규식 연습장
    2. 정규식 기본 문법
      1. [abc] : 해당 글자가 a, b, c 중 하나를 포함한다 (ex. “a”, “before”)
      2. [a-zA-Z], [0-9] : -를 이용하여 범위 지정. 각각 알파벳 전체, 숫자 전체를 의미
      3. 메타문자 : 정규식 표현을 위해 원래 의미가 아닌 다른 용도로 사용되는 문자
        1. . : 줄바꿈 문자인 \n을 제외한 모든 문자와 매치 (ex. a.b)
        2. * : 앞에 있는 글자를 반복한 것 (ex. tomor*ow)
        3. + : 앞에 있는 글자를 최소 1회 이상 반복(*이랑 뭔 차이…?)
        4. {m.n} : 반복 횟수를 지정 (ex. [0-9]{1,3} : 1~3글자의 연속된 숫자 )
        5. ? : 반복 횟수가 1회
        6. | : or
        7. ^ : not
    3. 파이썬에서 정규식 사용하기
      • import re : 모듈 불러오기
      • data = re.findall(r"(정규식)", 데이터소스) : 데이터소스에서 정규식을 이용해 찾은 모든 data를 data 변수에 저장함 → 이거 매우 잘 써먹을 수 있을 거 같다!
      • re.search(위랑 동일) : 일치하는 데이터 한 개만 찾는 함수

파이썬 아스키코드 함수

출처: https://ddolcat.tistory.com/684

왜?

어떻게?

너무 쉬워서 깜짝 놀람.

ord("문자열") : 문자열을 아스키코드로 변환함
chr(아스키코드값) : 아스키 코드 값에 상응하는 문자열을 반환함

백준 채점 결과 中 출력 초과

출처: https://help.acmicpc.net/judge/info

그냥 답이 틀린 것이라고 보면 됨(알고리즘 문제일 가능성 큼)

왜?

어떻게?

VS code 터미널 ↔ 에디터 창 단축키 설정하기: ctl + ;

출처: https://inpa.tistory.com/entry/VS-Code-⏱️-터미널-⭤-코드에디터-포커스-전환-단축키-설정

왜?

VScode 편집기에서 터미널이랑 에디터 창 포커스를 간편히 전환

어떻게?

  1. ctrl + shift + p → Open keyboard Shortcuts (JSON)
  2. 다음과 같이 작성 (나는 옵시디언 단축키랑 일치시키려고 alt + ;)
[
   {
      "key": "alt+;",
      "command": "terminal.focus",
      "when": "editorFocus"
   },
   {
      "key": "alt+;",
      "command": "workbench.action.focusActiveEditorGroup",
      "when": "terminalFocus"
   }
]

백준 달팽이 문제

출처: https://yoonsang-it.tistory.com/9

왜?

어떻게?

정상에 올라가면 멈춘다는게 포인트임!
구현 자체는 크게 어렵지 않은데, 생각해내는 것이 어렵다.

walrus 연산자 사용

출처: https://int-i.github.io/python/2020-05-29/python-walrus-operator/

무엇?

walrus 연산자는 := 이렇게 생겼는데, 마치 바다코끼리 눈이랑 송곳니처럼 생겨서 이름이 walrus.
할당과 동시에 연산을 해주는 편한 연산자.
예전에 부스트코스에서 파이썬 스터디 할 때 라이브코치님이 한번 써보라고 알려 주셨던 것인데,
이번에 문제 풀면서 처음으로 사용해봤다.

어디서?

백준
골든바흐
종이자르기

어떻게

파티션 = [(abs(a-b), temp := sorted([a, b])) for a in 소수 for b in 소수 if a+b == 숫자]
이렇게 … 썼다.
(점선과점선번호 := [list(map(int, sys.stdin.readline().split())) for _ in range(int(sys.stdin.readline()))]).sort()
이렇게 쓰면 횟수 입력 + 횟수대로 입력 받기 + 정렬하기를 동시에 할 수 있었음 (근데 가독성은…)

백준 문제 입력 여러 줄 받기 간단하게!

출처: https://daebaq27.tistory.com/57

왜?

어떻게?

import sys 
n,m = map(int, sys.stdin.readline().split()) 
arr = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]

for _ in range(m) 구조는 처음 봤다 !!