파이썬 58

Leetcode 1480 풀이(파이썬, 스위프트)

어떤 인덱스에 대하여 0부터 그 인덱스까지의 모든 배열인덱스의 값들의 합을 인덱스에 저장하는 것이다. 스위프트 class Solution { func runningSum(_ nums: [Int]) -> [Int] { var n=nums for i in 0...(n.count-2){ n[i+1] = n[i]+n[i+1] } return n } } 파이썬 class Solution: def runningSum(self, nums: List[int]) -> List[int]: for i in range(len(nums)): if i ==0: continue nums[i]=nums[i]+ nums[i-1] return nums

리트코드 풀이 2022.02.03

리트코드 1119 풀이(파이썬, 스위프트)

파이썬으로는 그냥 전부다 탐색하면서 해당되는 vowels를 배열에 담고 담긴 애들을 주어진 s에서 지워주면 되는데 스위프트는 removeAll이라는 새로운 메소드를 써서 까다롭지만 배울게 많았다. (contains랑 $0도) 스위프트 코드 class Solution { func removeVowels(_ s: String) -> String { var a = s let vowels : Set = ["a", "e", "i", "o", "u"] a.removeAll(where: {vowels.contains($0)}) return a } } 파이썬 코드 class Solution: def removeVowels(self, s: str) -> str: arr=[] for i in range(len(s)): i..

리트코드 풀이 2022.02.03

Leetcode 1929 풀이(파이썬, 스위프트)

단순히 배열을 두배로 늘려주는 문제. 지금보니 젤 쉬운문제.. 파이썬 class Solution: def getConcatenation(self, nums: List[int]) -> List[int]: return nums+nums #nums*2 스위프트 class Solution { func getConcatenation(_ nums: [Int]) -> [Int] { var a = nums //let으로 선언된 nums는 수정불가 하기 때문에 a라는 배열에 담음 return a+a //a*2는 스위프트에서 지원 안함 } }

리트코드 풀이 2022.02.03

Leetcode 1920번 풀이(파이썬, swift)

인덱스의 값을 배열에 한번더 참조한 값을 정답 배열에 집어넣으면 된다 젤 쉬운문제 파이썬 class Solution: def buildArray(self, nums: List[int]) -> List[int]: ans=[] for i in range(len(nums)): ans.append(nums[nums[i]]) return ans swift class Solution { func buildArray(_ nums: [Int]) -> [Int] { var a = [Int]() for (i,v) in nums.enumerated(){ a.append(nums[nums[nums.index(nums.startIndex, offsetBy:i)]]) } return a } }

리트코드 풀이 2022.02.03

백준 2292 풀이

def sol(a): return 0 빈 함수를 만들고 import unittest class TestNotebook(unittest.TestCase): def test_sol(self): self.assertEqual(sol(13), 3) unittest.main(argv=[''], verbosity=2, exit=False) 테스트 먼저 진행한다. 당연히 fail한다. def sol(a): x=1 cnt=1 while a>x: x+=6*cnt cnt+=1 return cnt 테스트 케이스를 이용해서 문제를 풀어 보았다. 벌집의 개수는 한 칸이 멀어질수록 6n을 1~n까지 더한 개수이다. 즉 처음 벌집까지 포함해야함으로 cnt를 1로 두고 1씩증가해가면서 6*cnt를 x라는 변수에 더해간다. x가 a보..

백준 풀이 2022.02.02

백준 1920 풀이(이분 탐색(binary search))

def binary_search(arr,target,start,end): while starttarget: end = mid-1 else: start=mid+1 return 0 n=int(input()) a = list(map(int, input().split())) a.sort() m=int(input()) b=list(map(int,input().split())) for i in b: print(binary_search(a,i,0,n-1)) 이분탐색을 할 줄 아냐는 문제... 나동빈 님의 "이것이 코딩 테스트다"를 참조하여 코딩했습니다. 생각하는 프로그래밍의 저자 존 벤틀리에 의하면 이진탐색 코드를 제대로 작성한 프로그래머는 10%내외라고 할정도로 딱 보면 쉬워 보이지만 막상 작성해보면 실수가 꼬옥 ..

백준 풀이 2022.02.01

백준 2839 풀이

n=int(input()) d= [5001]*5001 a=[3,5] d[0]=0 for i in range(2): for j in range(a[i],n+1): d[j]=min(d[j],d[j-a[i]]+1) if d[n]!=5001: print(d[n]) else: print(-1) dp의 가장 기초적인 문제이자 그리디가 섞인 문제이다. dp배열을 n의 최대범위 5000에다가 1을 더한 5001로 5001개 생성한다. (최소값을 구하기 위한 5001과 최대 n이 5000일 수 있으니) 2번 for문을 돌린건 3,5 짜리 화폐 2개 일 경우들을 나타낸 것이고 그 안에 이중 포문은 어짜피 a[i]보다 작으면 나눠 떨어지지 않으므로 a[i]에서 n까지 범위를 설정해 준다. 포문안에 내용은 점화식을 그대로 표..

백준 풀이 2022.02.01