[TIL] 2021.09.23

TIL / / 2021. 9. 23. 23:44

나의 원씽 플랜

0. 확언

 - 어제보다 더 나은 사람이 되기

 - 질보다 양이다. 꾸준함으로 버티자.


1. 미라클모닝

 - 6시 기상성공

2. 팔굽혀펴기

 - 완료
3. CAKE 10분 학습하기

 - 완료
4. 전문지식 공부하기 (알고리즘, CS, python 심화)

 - 프로그래머스 두 문제 풀이
5. TIL 작성하기

 

오늘 한 일

  • Cake 학습
  • 대기업 자소서 작성연습
  • 프로그래머스 두 문제 풀이

 

간단정리

Cake 일일 퀴즈

 

대박, 쩌는데? 이런.. 말도 안 돼! 등 리액션

That's dope! (쩐다!)

Totally! (물론이지!)

So cool! (완전 대박이야!)

Jesus! (제기랄!)

No way! (말도 안돼!)

Yikes. (이런.)

 

Cake 일일 회화

 

drop  : (동사) ~을 떨어뜨리다

have something on one's mind : 마음에 걸리는 것이 있다, 걱정하다

be anxious about ~ : ~ 때문에 불안해하다

tight : (형용사) (일정, 비용 등이) 빡빡한

be all thumbs : 서투르다, 어설프다

you've got this. : 잘 해내실 거에요

 

프로그래머스 문제 풀이

 

시간남을 때 1~2 레벨을 모두 풀어보는 것을 목표로 풀기 시작

자신감 증진을 위해(?) 1레벨 부터 풀어보았다.

 

로또의 최고 순위와 최저 순위

https://programmers.co.kr/learn/courses/30/lessons/77484

 

풀이

등수를 저장한 rank list 를 활용한 풀이방식이 최선의 방식인듯

# my answer
def solution(lottos, win_nums):
    # 최고점 : 0 으로 표기된 숫자가 모두 일치할 경우
    # 최저점 : 0 으로 표기된 숫자가 모두 일치하지 않을 경우
    zero_count = 0
    for num in lottos:
        if num == 0:
            zero_count += 1
        elif num in win_nums:
            win_nums.remove(num)

    # lottos == 0: 1 // lottos == 1: 2
    max_val = len(win_nums) - zero_count + 1 if len(win_nums) - zero_count != 6 else 6
    min_val = len(win_nums) + 1 if len(win_nums) != 6 else 6
    answer = [max_val, min_val]
    return answer

# best answer
def solution(lottos, win_nums):
    # 최고점 : 0 으로 표기된 숫자가 모두 일치할 경우
    # 최저점 : 0 으로 표기된 숫자가 모두 일치하지 않을 경우
    rank = [6, 6, 5, 4, 3, 2, 1]
    zero_count = 0
    ans = 0
    for num in lottos:
        if num == 0:
            zero_count += 1
        elif num in win_nums:
            ans += 1

    answer = [rank[ans + zero_count], rank[ans]]
    return answer

 

 

신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410

 

풀이

정규식에 대해 복습할 수 있는 기회가 되었다.

string.lower() => 대문자를 소문자로 변환

string.upper() => 소문자를 대문자로 변환

string.capitalize() => 첫 글자만 대문자로 변환

    st = st.lower()

 

re.sub('패턴', '바꿀문자열', '문자열', 바꿀횟수)


    # a-z 알파벳 & 0-9 숫자 & -_. 을 제외한 문자를 '' 으로 변환
    st = re.sub('[^a-z0-9\-_.]', '', st)
    # .+ 를 사용하면 . 뒤에 .이 나오는지 체크한다.
    # . 뒤에 . 이 나오면 '.' 으로 변환
    st = re.sub('\.+', '.', st)
    # ^ 는 문자의 시작 / $ 는 문자의 마지막을 의미한다.
    # ^[.] --> 시작이 . 인 것 / [.]$ --> 마지막이 . 인 것
    # 처음과 마지막이 . 이면 '' 으로 변환
    st = re.sub('^[.]|[.]$', '', st)
    # 5, 6단계
    # list slicing 에서 끝 인덱스는 범위를 벗어난 인덱스를 지정할 수 있음
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    # 7단계
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])

# my solution
import re


def remove_first_last_dot(plain_text):
    while plain_text[0] == "." or plain_text[-1] == ".":
        if plain_text == ".":
            plain_text = ""
            return plain_text
        elif plain_text[0] == ".":
            plain_text = plain_text[1:]
        elif plain_text[-1] == ".":
            plain_text = plain_text[:-1]

    return plain_text


def solution(new_id):
    if len(new_id) != 0:
        # 1단계 new_id 의 모든 대문자를 대응되는 소문자로 치환합니다.
        new_id = new_id.lower()
        # 2단계 new_id 에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
        p = re.compile('[^0-9a-z-_.]')
        new_id = re.sub(p, "", new_id)
        # 3단계 new_id 에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
        while ".." in new_id:
            new_id = new_id.replace("..", ".")
    else:
        new_id = "a"

    # 4단계 new_id 에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
    # print(new_id)
    new_id = remove_first_last_dot(new_id)

    # 5단계 new_id 가 빈 문자열이라면, new_id에 "a"를 대입합니다.
    if len(new_id) == 0:
        new_id = "a"

    # 6단계 new_id 의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
    #      만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
    # 7단계 new_id 의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
    if len(new_id) <= 2:
        new_id += new_id[-1] * (3 - len(new_id))
    elif len(new_id) >= 16:
        new_id = remove_first_last_dot(new_id[:15])

    return new_id


# best solution
def solution(new_id):
    st = new_id
    st = st.lower()
    # a-z 알파벳 & 0-9 숫자 & -_. 을 제외한 문자를 '' 으로 변환
    st = re.sub('[^a-z0-9\-_.]', '', st)
    # .+ 를 사용하면 . 뒤에 .이 나오는지 체크한다.
    # . 뒤에 . 이 나오면 '.' 으로 변환
    st = re.sub('\.+', '.', st)
    # ^ 는 문자의 시작 / $ 는 문자의 마지막을 의미한다.
    # ^[.] --> 시작이 . 인 것 / [.]$ --> 마지막이 . 인 것
    # 처음과 마지막이 . 이면 '' 으로 변환
    st = re.sub('^[.]|[.]$', '', st)
    # 5, 6단계
    # list slicing 에서 끝 인덱스는 범위를 벗어난 인덱스를 지정할 수 있음
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    # 7단계
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

 

느낀점

  • cake 는 켜기만 하면 생각보다 10분을 채우기 쉽다. 정리하는 시간이 더 길다!
  • 대기업 자소서는 대부분 비슷한 느낌이다. 지원동기, 입사후 포부, 강점 등...
  • 프로그래머스를 취미처럼 풀어보자
  • 이제부터 원씽은 본업에 도움이 되는 공부 (영어 조금, 전공지식 많이)
반응형

'TIL' 카테고리의 다른 글

[TIL] 2021.09.25  (0) 2021.09.25
[TIL] 2021.09.24  (0) 2021.09.24
[TIL] 2021.09.17  (0) 2021.09.18
[TIL] 2021.09.16  (0) 2021.09.17
[TIL] 2021.09.15  (0) 2021.09.15
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기