TIL - 2023/08/13

Hoony·2023년 8월 13일
0

Daily

목록 보기
20/30
post-thumbnail

💼 오늘 작업 내용

1. [원포인트] 새롭게 알게된 내용 정리 (로직 최적화)

기능 개발하면서 만났던 N+1 문제에 대해 내용 정리

N+1 문제에 대해 깊게 고민할 수 있었던 경험

이전까지는 그저 이론적으로만 알고있었지만 해당 경험을 통해 위험성을 깨닫고 중요성을 다시 한번 인식하게 됨.



2. 코딩테스트 공부

  • programmer_67256 - 키패드 누르기 (난이도 1)
    def find_position(target):
        keypad = [[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]
        for i, row in enumerate(keypad):
            for j, val in enumerate(row):
                if val == target:
                    return [i, j]
            
    
    def solution(numbers, hand):
        answer = ""
        lPos, rPos = '*', '#'
        
        leftSide = [1,4,7]
        rightSide = [3,6,9]
        
        
        for number in numbers:
            if number in leftSide:
                lPos = number
                answer += 'L'
            elif number in rightSide:
                rPos = number
                answer += 'R'
            else:
                lKeyPadPos = find_position(lPos)
                rKeyPadPos = find_position(rPos)
                targetKeyPadPos = find_position(number)
                
                lDiff = abs(lKeyPadPos[0] - targetKeyPadPos[0]) + abs(lKeyPadPos[1] - targetKeyPadPos[1])        
                rDiff = abs(rKeyPadPos[0] - targetKeyPadPos[0]) + abs(rKeyPadPos[1] - targetKeyPadPos[1])        
                if lDiff < rDiff:
                    lPos = number
                    answer += 'L'
                elif rDiff < lDiff:
                    rPos = number
                    answer += 'R'
                else:
                    if(hand == 'left'):
                        lPos = number
                        answer += 'L'
                    else:
                        rPos = number
                        answer += 'R'
        
        return answer
  • programmers118666성격유형검사하기
    def solution(survey, choices):
        answer = ''
        
        result = { 'R' : 0, 'T' : 0, 'C' : 0, 'F' : 0, 'J' : 0, 'M' : 0, 'A' : 0, 'N' : 0}
        personalCases = [['R','T'], ['C','F'], ['J','M'], ['A','N']]
        
        for idx, choice in enumerate(choices):
            if choice < 4 : #비동의 점수
                result[survey[idx][0]] += 4 - choice
            elif choice > 4 : #동의 점수
                result[survey[idx][1]] += choice - 4
        
        for case in personalCases:
            if(result[case[0]] >= result[case[1]]):
                answer += case[0]
            else:
                answer += case[1]
            
        
        return answer
  • programmers72410신규 아이디 추천
    import re
    def solution(new_id):
        answer = ''
        
        #1단계
        new_id = new_id.lower()
        
        #2단계
        allowedCharList = [chr(i) for i in range(97,123)] + [str(i) for i in range(0,10)] + ['-'] + ['_'] + ['.']
        tmp_new_id = ""
        for char in new_id:
            if char in allowedCharList:
                tmp_new_id += char
        new_id = tmp_new_id
        
        #3단계
        new_id = re.sub(r'\.{2,}', '.', new_id)
        
        #4단계
        if(len(new_id) <= 1):
            if(len(new_id) == 1):
                if(new_id[0] == '.'):
                    new_id = ''
        else:
            if new_id[0] == '.':
                new_id = new_id[1:]
            if new_id[-1] == '.':
                new_id = new_id[:-1]
        
        #5단계
        if(len(new_id) == 0):
            new_id = 'a'
        
        #6단계
        if(len(new_id) >= 16):
            new_id = new_id[:15]
            if new_id[0] == '.':
                new_id = new_id[1:]
            if new_id[-1] == '.':
                new_id = new_id[:-1]
        
        #7단계
        if(len(new_id) <= 2):
            new_id += new_id[-1] * (3 - len(new_id))
            
        answer = new_id
        return answer


📚 독서

  • [꽃을 보듯 너를 본다] 01쪽 ~ 21쪽
  • [이끼숲] 01쪽 ~ 90쪽
profile
Just Do it!

0개의 댓글