전체 글 249

swift String.Index

파이썬이나 여타 언어들에서는 손쉽게 int로 배열의 인덱스에 접근할 수 있지만 swift의 경우 String.Index 타입을 이용해야한다. 바로 예를 들겠다. a = "abc" print(a[0]) # a 파이썬에서는 이는 너무 당연하다. 하지만 스위프트의 경우 var a = "abc" print(a[a.startIndex]) // a 위의 파이썬 코드와 동일한 코드이다. startIndex와 endIndex는 처음과 끝 인덱스를 의미하지만 endIndex는 파이썬으로 치면 len(a)와 같아서 a라는 문자열이 있다고 치면 a의 길이와 같다. 즉 인덱스 측면에서 봤을때는 1을 빼줘야한다. 코드로 설명하면 var endIndex = a.index(before: a.endIndex) var last = a..

swift 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

코드포스 230A 풀이

a,n = map(int, input().split()) arr=[] flag=True for _ in range(n): input_data=input().split() arr.append((int(input_data[0]),int(input_data[1]))) arr = sorted(arr,key=lambda b: b[0]) for i in range(len(arr)): if a>arr[i][0]: a+=arr[i][1] else: flag =False if flag: print("YES") else: print("NO") 사용자의 힘이 주어지고 드래곤의 힘보다 크면 보너스만큼 힘이 추가되고 드래곤의 힘보다 작으면 지는 게임이다. 드래곤의 힘과 보너스가 한 줄씩 주어지기 때문에 튜플 형태로 리스트에 a..

코드포스 풀이 2022.01.31

코드포스 131A 풀이

a=input() a=[x for x in a] flag= True if a[0].islower() == True: for i in range(len(a)-1): if a[i+1].islower()==True: flag = False for j in range(len(a)-1): if flag: a[j+1]=a[j+1].lower() if flag: a[0]=a[0].upper() else: for i in range(len(a)-1): if a[i+1].islower()==True: flag=False for i in range(len(a)): if flag: a[i]=a[i].lower() print("".join(a)) 문제가 첫번째만 소문자고 나머지는 다 대문자일 경우와 전부 대문자일 경우만 수정..

코드포스 풀이 2022.01.31

코드포스 344A 풀이

import sys n=int(sys.stdin.readline().rstrip()) pre ='' cnt=1 cur=[] for i in range(n): cur.append(sys.stdin.readline().rstrip()) # if i==0: # continue # if cur[i]!=cur[i-1]: # cnt+=1 a="".join(cur) for i in range(0,len(cur)*2,2): if "00" in a[i:i+4] or "11" in a[i:i+4]: cnt+=1 print(cnt) 개인적으로 개삽질한 문제.. 문제는 쉬운데 최대 10만개의 input을 받을 수 있어서 시간초과를 내지 않으려면 반드시 sys로 인풋을 받아줘야한다. 위와 같이 sys를 import시키고 inp..

코드포스 풀이 2022.01.31