본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

(62)
프로그래머스 - LV3. 가장 긴 팰린드롬 팰린드롬(Panlindrome) 팰린드롬이란 "kayak", "eye"과 같이 뒤집어도 같은 문자열을 말한다. 문제 programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들 programmers.co.kr 코드 1) 경우를 나누어 비교 def solution(s): maxLen = 1 #경우를 나누어 비교 for i in range(len(s)): if i-maxLen >= 1 and s[i-maxLen-1 :..
프로그래머스 - LV2. 튜플(2019 카카오 개발자 겨울 인턴십) 문제 programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 코드 1) 두개의 배열(arr1, arr2)을 비교하여 arr2에 없는 arr1의 원소를 반환 def solution(s): sets = s[2:-2].split('},{') for i in range(len(sets)): sets[i] = list(map(int,sets[i].split(','))) sets[i].so..
프로그래머스 - LV3. 2*n 타일링 문제 programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 코드 1) math모듈의 factorial 이용 from math import factorial def solution(n): answer = 0 tile_1 = n tile_2 = 0 while tile_1 >= 0: if tile_1 == 0 or tile_2 == 0: answer += 1 else: answer += factorial(tile_1 + ..
프로그래머스 - LV2. 조이스틱 문제 programmers.co.kr/learn/courses/30/lessons/42860# 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 코드 def solution(name): arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" origin = ["A"]*len(name) count = [0]*len(name) cnt = 0 if len(name) == 1: if arr.index(name[0]) >= 13: return 26-arr.index(name) else: ret..
프로그래머스 - LV2. 전화번호 목록 문제 programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 코드 1) startswitch()이용 오랜만에 다시 풀어봤는데 효율성 테스트에서 실패가 떴다. def solution(phone_book): phone_book.sort(key=lambda x:len(x)) for i in range(len(phone_book)): for j in range(i+1, len(phone_book)): if phone_book[j].s..
알고리즘 - LV3.줄 서는 방법 문제 programmers.co.kr/learn/courses/30/lessons/12936 코딩테스트 연습 - 줄 서는 방법 n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람 programmers.co.kr 코드 1) itertools모듈의 permutations이용 => 경우의 수를 불필요하게 많이 계산하게 됨 import itertools def solution(n, k): return list(itertools.permutations(range(1,n+1), n))[k-1] 2) math모듈의 factorial이용 import math def soluti..
알고리즘 문제 - LV3. 숫자의 표현 문제 programmers.co.kr/learn/courses/30/lessons/12924 코딩테스트 연습 - 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 programmers.co.kr 코드 1) 배열 슬라이싱 이용 import math def solution(n): result = 1 #result에 n = n인 경우 미리 포함 numbers = [] mid = math.ceil(n/2) for num in range(1,n+1): numbers.append(num) for i in range(mid): for j in range(..
알고리즘 문제 - LV3. 최고의 집합 문제 programmers.co.kr/learn/courses/30/lessons/12938 코딩테스트 연습 - 최고의 집합 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만 programmers.co.kr 코드 1) 나머지 개수만큼 +1 def solution(n, s): if n > s: return [-1] div = s//n rem = s%n answer = [div]*(n) print("answer =",answer) print("나머지 =",rem) for k in range(0, rem): answer[k] += 1 answer.sort..
알고리즘 문제 - LV3. 멀리 뛰기 문제 programmers.co.kr/learn/courses/30/lessons/12914 코딩테스트 연습 - 멀리 뛰기 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2 programmers.co.kr 1)itertools모듈의 product 중복순열 이용 from itertools import product def solution(n): answer = [] if n%2 == 0: start = n//2 else: start = n//2+1 end = n for i in range(start, end+1): p..
알고리즘 문제 - LV1. 체육복 문제 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성..