Programmers in Berlin - 3

김태준·2023년 1월 2일
0

Travel

목록 보기
4/8


베를린 알렉산더광장 야경 ~

헬스장도 가서 오랜만에 운동도 해봤다 시설 정말 좋고 무엇보다 월 3만원에 락커, 샤워실까지.. 최고였다 근육 잘먹고 갑니다잉


산책하면서 추억으로 남길 사진


뭐 이스트사이드 갤러리랬나 별로 웅장한 느낌은 없었다. 그냥 이런게 있구나 요정도.. ㅎ

오늘은 베를린 중앙에 있는 도서관에서 공부를 좀 할 계획
같이 살고 있는 한국인 동생에게 추천받았다.

문제 풀이

가장 큰 수

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x : x*3, reverse = True)
    
    return str(int(''.join(numbers)))
  • 숫자로 되어있는 numbers 리스트 > 문자로 변환 (map 이용)
  • numbers 내 원소의 범위가 0이상 1000이하 이므로 3자리 수로 만들어 준 후 문자열 비교 진행!

소수 찾기

from itertools import permutations

def solution(numbers):
    answer = []
    nums = [i for i in numbers]
    case = []
    for i in range(1, len(numbers) + 1):
        case += list(permutations(nums, i))
    check_num = [int(''.join(k)) for k in case]
    
    for n in check_num:
        if n < 2:
            continue
        check = True
        for i in range(2, int(n*0.5) + 1):
            if n % i == 0:
                check = False
                break
        if check:
            answer.append(n)
    return len(set(answer))

< 풀이 과정 >

  • 주어진 numbers 문자를 하나씩 split 진행 (nums 리스트로 생성)
  • 이후 nums 리스트 내 문자들을 permutation 조합 진행 (순열조합) - case 리스트
  • 순열조합된 case리스트를 join함수를 통해 하나로 묶어주고 int형변환 - check_num
  • check_num 내 숫자가 소수인지 판별
  • 소수인 경우 answer 리스트에 포함하고 결과적으로 answer를 set로 중복제거한 len 길이 리턴

쿼드압축 후 개수 세기

def solution(arr):
    answer = [0, 0]
    n = len(arr)
    def quad_tree(x, y, n):
        check = arr[x][y]
        for i in range(x, x+n):
            for j in range(y, y+n):
                if arr[i][j] != check:
                    lth = n // 2
                    quad_tree(x, y, lth)
                    quad_tree(x+lth, y, lth)
                    quad_tree(x, y+lth, lth)
                    quad_tree(x+lth, y+lth, lth)
                    return
        answer[check] += 1
    quad_tree(0, 0, n)
    return answer

< 풀이 과정 >
그림을 통해 문제 이해를 좀 더 쉽게 할 수 있었다.

  • 우선 arr만 주어진 상황이고 정사각형이므로 n = len(arr)을 구해준다.
  • 이후 quad_tree 함수를 통해 칸을 4분할하여 값이 같은지 비교 진행
  • 초기값을 지정하여 주어진 범위 내 값들과 초기값이 다른 경우 4분할하여 재귀함수 진행
  • answer[check] 즉 check는 무조건 0 또는 1이므로 실제 arr배열에 분할 이후의 각 숫자 개수 만큼 + 1 가능
    실제로 x, y 초기값인 (0,0) 부터 n 길이 동안 quad_tree함수 실행하기
profile
To be a DataScientist

0개의 댓글