코테 22

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

++가 들어있으면 a라는 변수를 만들어서 +=1 해주고 아니면 -=1 해주는 단순한 문제 스위프트: class Solution { func finalValueAfterOperations(_ operations: [String]) -> Int { var a = 0 for i in operations{ if i.contains("++"){ a+=1 } else{ a-=1 } } return a } } 파이썬: class Solution: def finalValueAfterOperations(self, operations: List[str]) -> int: x=0 for i in range(len(operations)): if "++" in operations[i]: x+=1 else: x-=1 return x

리트코드 풀이 2022.02.04

리트코드 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