미갱이 스터디 5/26

코변·2022년 5월 25일
0
post-thumbnail

Photo by Pietro Mattia on Unsplash

07:00 ~ 08:00

행렬의 덧셈

def solution(arr1, arr2):
    for i in range(len(arr1)):
        for j in range(len(arr1[i])):
            arr1[i][j] += arr2[i][j]
    return arr1

2차원 리스트에 2개의 값을 조회하고 그 값들을 서로 더하는 문제였다. 2중 for문으로 값에 접근해 한 배열에 더하고 그 배열을 리턴하는 식으로 문제를 풀었다. 그러나 한 줄 for문으로 이 문제를 개선할 수 있지 않을까 고민했고 개선버전은 아래와 같다.
개선버전

def solution(arr1, arr2):
    answer = [[x + y for x, y in zip(arr1[i], arr2[i])] for i in range(len(arr1))]
    return answer

X만큼 간격이 있는 n개의 숫자

def solution(x, n):
    answer = [x * i for i in range(1, n+1)]
    return answer

주어진 x의 배수를 구하는 문제 (x씩 커진다고 할 수 있다 그게 그거지만) range를 통한 for문이 0부터 시작한다는 함정에만 빠지지 않으면 쉽게 해결할 수 있는 문제라고 생각한다.

문자열 내림차순으로 배치하기

def solution(s):
    answer = ''.join(sorted(s, reverse=True))
    return answer

문자열을 리스트에 담아 내림차순으로 정렬해 다시 문자열로 반환했다. 파이썬의 편리함에 너무 기대는 것은 아닐까? 다음에 이런 문제는 아스키코드로 변환한 후에 정렬을 해볼까 싶기도 하다.

자연수 뒤집어 배열로 만들기

def solution(n):
    answer = list(map(int, str(n)[::-1]))
    return answer

위 문제도 동일하게 파이썬의 편리함게 기댄 것 같기도 하다. c언어나 java공부를 해서 다시 이런 문제들에 접근해보는 것도 좋은 방법 같다.

정수 제곱근 판별

def solution(n):
    check_num = str(n ** (1/2))
    if check_num[-2:] == '.0':
        return (int(check_num[:-2])+1) **2
    else:
        return -1

파이썬에서 제곱근을 구하는 방법은 math 라이브러리를 가져와 sqrt를 하는 방법, 위와 같이 ** (1/2)를 하는 방법 두가지로 나뉜다.
문제를 유니크하게 풀긴 했지만 옳은 풀이는 아니라고 생각한다. 이런 문제에서 형변환을 사용하면 문제가 될 수 있다고 코딩관련 책에서 본 적이 있다. (형변환으로 문제를 편리하게 풀려고하는 것이 좋은 습관은 아니라고 나도 생각한다.) 그래서 이 문제도 개선버전을 만들어 보았다.

개선버전

def solution(n):
    check_num = n ** (1/2)
    answer = (check_num+1) ** 2 if n ** (1/2) % 1 == 0 else -1
    return answer

1로 나눈 나머지가 존재하지않는다면 그건 소수점 자리가 존재한다는 것이고 고로 어떤 수의 제곱근이 아니라는 뜻이다. 고로 제곱근을 씌운 형태의 수에 1을 나누는 검사를 통해 쉽게 판별하고 이를 통한 식을 만들 수 있었다.

콜라츠 추측

def solution(num):
    i = 1
    while i < 501:
        if num == 1:
            return i-1
        num = num // 2 if num % 2 == 0 else (num * 3) + 1
        i+=1
    return -1

조건대로 따라 적기만하면 쉽게 풀 수 있는 식이라고 말하고 싶지만 주어진 숫자가 1일 때를 조건에 넣지 못해서 헤매다가 조건을 약간 수정하여 풀었다.

08:00 - 09:00

의외로 정리할 문제가 많아서 밀린 스터디 일지를 썼다.

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글