240712

Gi Woon Lee·2024년 7월 12일
1

TIL

목록 보기
16/78

SQL

Python

🟧 zip(iterables)

syntax: zip(*iterables)

  • iterables: 두 개 이상의 반복 가능한 객체(리스트, 튜플 등)를 인자로 받습니다.

  • 반환값: 각 iterable에서 동일한 인덱스에 있는 요소들을 묶은 튜플

-ex)

numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]

만약 길이가 다른 iterables를 zip()하면 index대응값이 없는 리스트의 요소는 반환값에 포함하지 않는다.

-ex)

numbers = [1, 2, 3, 4]
letters = ['a', 'b']
zipped = zip(numbers, letters)

print(list(zipped))  # [(1, 'a'), (2, 'b')]

이렇게 zip()을 통해 만들어진 튜플 쌍은 dict(zip())을 통해 dictionary로 만들거나, 각 대응값을 더하는 것도 가능하다.

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']
dictionary = dict(zip(keys, values))

print(dictionary)  # {'name': 'Alice', 'age': 25, 'city': 'New York'}

# 
list1 = [1, 2, 3]
list2 = [4, 5, 6]
summed_list = [x + y for x, y in zip(list1, list2)]

print(summed_list)  # [5, 7, 9]

🟧 index() Method

syntax: list.index(elmnt)

  • elmnt: 찾고 싶은 인자. 모든type(string, 숫자, 리스트, 등등)을 넣을 수 있다.
fruits = [4, 55, 64, 32, 16, 32]

x = fruits.index(32)

print(x)

출력: 3

index() VS find() 정리 tstory

🟧 for문에서 돌아가는 if, elif

문제:
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

def solution(arr, divisor):
    answer = []
    for e in arr:
        if e % divisor == 0:    # 자연수 배열 arr의 인수 e 가 divisor 값으로 나누어 떨어지면(나누었을 때 나머지가 0 이면)
            answer.append(e)    # 해당 인수 e를 answer 리스트에 추가하라.
        elif e % divisor != 0:  # 인수 e 가 divisor 로 나누어 떨어지지 않으면,
            answer = [-1]       # 배열에 -1을 담아 반환하라.
    answer.sort()               # 오름차순으로 정렬하여 반환하라
    return answer   

위 코드가 틀린 이유는 다음과 같다.

solution([5, 9, 7, 10], 5) 일 때,
리스트[5, 9, 7, 10]의 인수 하나 하나가 for문을 돌며 if절에 하나씩 들어간다는 것을 몰랐던 것이다.
무슨 말인지 이해하기 위해 flow를 살펴보자.

  • flow
    리스트[5, 9, 7, 10]가 차례로 for문을 돌며 if e % divisor == 0 에 들어가면,
    1.5 % 5 == 0 -> answer[] 에 append가 되어 answer[5]가 된다.
    2.9 % 5 != 0 -> elif 실행, answer = [-1]
    3.7 % 5 != 0 -> elif 실행, answer = [-1]
    4.10 % 5 == 0 -> answer.append(10) -> answer == [-1, 10]

결과: answer == [-1, 10]
정답: answer == [5, 10]

정답 코드는 다음과 같다.

def solution(arr, divisor):
    answer = []
    for e in arr:
        if e % divisor == 0:    # 자연수 배열 arr의 인수 e 가 divisor 값으로 나누어 떨어지면(나누었을 때 나머지가 0 이면)
            answer.append(e)    # 해당 인수 e를 answer 리스트에 추가하라.
    if len(answer) == 0:        # 아무것도 append되지 않은 리스트 즉 len(answer) 가 0인 리스트 라면! 
        answer = [-1]           # 해당 리스트 answer 에 [-1]를 담아라. 
    answer.sort()               # 오름차순으로 정렬하여 반환하라
    return answer   

이 때 ```

🟧 Dictionary get() Method

참고 링크

syntax: dictionary.get(keyname, value)

  • keyname: 원하는 value값에 대응되는 key값 (Required)
  • value: 대응되는 key값이 없을 때 return하고자 하는 value값 (Optional)
    Default value None

-ex)

car = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}

x = car.get("price", 15000)
y = car.get("brand")

print(x)
print(y)

#15000
#Ford

SQL 코트카타

Python 코트카타

콜라츠 추측 문제

파이썬 코드

def solution(num):
    cnt = 0     # 필요한 변수 선언
    while cnt < 500:    # while 조건 설정: "cnt가 500 미만이면 계속 반복해라"  cnt가 500을 넘어가면 False니까 while문이 정지함
        if num == 1:    # break 조건 설정: 이거 안하면 무한 루프 지옥에 빠짐
            break
        elif num % 2 == 0:  # 짝수 조건
            num = num / 2
            cnt = cnt + 1
        else:               # 홀수 조건 
            num = num * 3 + 1   
            cnt = cnt + 1
# cnt 값 return하는데, 500번 안에 1을 만들지 못하는 경우를 else로 배정하고 -1을 리턴하는 조건문을 만든다.             
    return cnt if cnt != 500 else -1    
  1. while 반복문을 사용해야 하는 문제임을 확인.
  2. while 반복 조건, 필요한 변수 cnt, break 조건을 생성한다.
  3. if 조건문으로 짝수/홀수 연산을 진행한다.
  4. 각 조건 수행 시 수행숫자cnt의 값이 하나씩 증가함을 잊지 말자.
  5. 문제가 원하는 수행 숫자 cnt 값을 return해준다. 이 때 500번의 시도 안에 1을 만들지 못하는 경우를 else 에 배정하여 -1을 반환할 수 있도록 return 문을 만들어준다.

다른 사람의 코드

def collatz(num):
    for i in range(500):
        num = num / 2 if num % 2 == 0 else num * 3 + 1
        if num == 1:
            return i + 1
    return -1

음양 더하기

def solution(absolutes, signs):
    for i in range(len(signs)): # signs와 absolutes의 리스트 값 숫자가 동일할테니 
        if signs[i]:  # True인 경우, 양수 
            absolutes[i] = absolutes[i]
        else:  # False인 경우, 음수
            absolutes[i] = -absolutes[i]
    return sum(absolutes) # 해당 값을 모두 더한다. 

# 위 코드를 list comprehension으로 간결하게 작성하면 다음과 같다.
def solution(absolutes, signs):
    return sum(absolutes[i] if signs[i] else -absolutes[i] for i in range(len(absolutes)))

번호 마스킹

풀이

def solution(phone_number):
    length = len(phone_number) - 4
    masking_part = '*' * length
    last_four_digits = phone_number[-4:]
    masked_number = masking_part + last_four_digits
    return masked_number
  • 과정
  1. 입력받은 문자열의 길이 구하기 -> length 변수에 할당
  2. 길이 - (length - 4) 만큼의 수를 *로 채우기 -> masking_part 변수에 할당
  3. 뒤 4개의 글자 -> last_four_digits 변수에 할당
  4. masking_part + last_four_digits = return masked_number
  5. return masked_number

다른 방법

def solution(phone_number):
	return "*"*(len(phone_number)-4)+phone_number[-4:]

현타오는 깔쌈한 코드다.
문자열끼리 사칙연산이 가능한 점을 활용했다.
: '****' + phone_number문자열의 뒤에서 4개 문자

0개의 댓글