본문 바로가기

swift42

프로그래머스 - 표 편집 - 2021 카카오 인턴 - swift https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 문제해설은 이미 카카오테크에 나와있다. 본글은 연결리스트로 푸는 방법과, 세그먼트트리 + 이분탐색 으로 푸는 방법을 작성할것이다. 굉장히 좋은 문제라고 생각한다. 당시 시험볼때 효율성을 맞추지못한 문제였다. 다시 풀어보니, 연결리스트를 이용하니 쉽게 풀리는 문제였다. 우선 문제의 조건에도 핵심이있다. 마지막에 ".. 2021. 7. 12.
백준 10473 - 인간 대포 - swift https://www.acmicpc.net/problem/10473 10473번: 인간 대포 입력은 한 개의 길찾기 문제를 표현한다. 첫 줄에는 두 개의 실수가 입력되며 각각은 당신이 현재 위치한 X, Y좌표이다. 두 번째 줄에는 목적지의 X, Y좌표가 실수로 입력된다. 이어지는 줄에는 대 www.acmicpc.net 두 점사이의 거리공식만 안다면 풀수있다. 물론 조금의 고민이 필요하다. 우선 대포는 어떤 방향이든 50m로 날라갈수있다고 했다. 즉 대포는 50m주변 원으로 날라갈 수 있는데 조금만 고민해보면 어느지점으로 날라가야할지 알 수 있다. 답은 대포지점과 다른점 사이의 직선으로 날라가면 된다. 즉 두 점 사이의 직선의 방정식안에서 50m로 날라가면된다. 하지만 이렇게 50m가 되는 지점을 찾을수없.. 2021. 6. 29.
백준 1699 - 제곱수의 합 - swift https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net dp문제이다. dp [ i ] = i값을 만들기위한 최소한의 항의개수라고 정의한다. 그래서 1부터 N까지 하나씩 탐색하면서, 1부터 N까지중에서 제곱수로 dp를 갱신해나간다. 처음에는 각각 10만*10만 시간복잡도인줄 알아서 고민했는데, 알고보니, 제곱수까지만 확인하면된다. 즉 N이 10000까지라면, 제곱수는 1부터 100까지만 확인하면 된다. 10만이라면.. 2021. 6. 27.
WWDC 15 - Optimizing Swift Performance 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻 https://developer.apple.com/videos/play/wwdc2015/409/ Optimizing Swift Performance - WWDC15 - Videos - Apple Developer Hear from the experts about how you can write faster Swift code and use Instruments to identify performance bottlenecks. Dive deep into... developer.apple.com 관련내용 더효과적인코드를 작성할수있도록 도와주는 기술들을 발견하라~ 👍요약 swift는 컴파일러를통해 최.. 2021. 6. 27.
백준 1039 - 교환 - swift https://www.acmicpc.net/problem/1039 1039번: 교환 첫째 줄에 정수 N과 K가 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, K는 10보다 작거나 같은 자연수이다. www.acmicpc.net 완전탐색이 필요한 문제다. 완전탐색을 하면 중복되는 경우의수가 존재할수있는데, 이는 check [ 숫자 ] [ k ] = k번 교환했을때 숫자가 이미 나왔는지 로 체크하여 중복횟수를 줄일 수 있다. 길이가 1인경우와 길이가 2면서 0이포함된 숫자는 교환할수없다는 부분도 고려해야한다. let inp = readLine()!.split(separator: " ").map{Int(String($0))!} var check = Array(repeating: Array(rep.. 2021. 6. 26.
백준 15732 - 도토리 숨기기 - swift https://www.acmicpc.net/problem/15732 15732번: 도토리 숨기기 첫째 줄에 상자의 개수 N(1 ≤ N ≤ 1,000,000)과 규칙의 개수 K(1 ≤ K ≤ 10,000), 도토리의 개수 D(1 ≤ D ≤ 1,000,000,000)가 주어진다. 그 후 K개 줄에는 A, B, C(1 ≤ C ≤ A ≤ B ≤ N)가 주어지며 A번 상자부터 www.acmicpc.net 조금 고민이 필요한 문제였다. 하나씩 규칙들을 탐색하면서 각 상자에 카운팅해도되겠지만, 1개씩 찾다보면 도토리가 총 10억개이므로 시간초과다. 좀 더 효율적으로 찾는 방법이 필요하다. 고민을해보니, 100~150개에서, 10간격이라면, 총 6개 도토리를 넣을수있다. 110~150, 15간격이라면 총 3개 도토리를.. 2021. 6. 26.
백준 2287 - 모노디지털 표현 - swift https://www.acmicpc.net/problem/2287 2287번: 모노디지털 표현 몇 개의 숫자 K(K는 1, 2, …, 9중 하나)와 사칙 연산(덧셈, 뺄셈, 곱셈, 나눗셈)만을 사용하여 어떤 자연수 X를 수식으로 표현한 것을 X의 K-표현이라 부른다. 수식에는 괄호가 포함될 수 있으며, 나 www.acmicpc.net 조합과 dp를 이용한다. 사칙연산으로 경우의수를 고려하다보면 골치아파진다. 물론 사칙연산으로 경우의수를 고려하긴해야하는데, 이는 4가지경우의수로만 한정짓고, K가 몇개사용됐는지를 중점으로 경우의수로 고민하면 풀린다. K는 최대 8개까지사용할수있다고했다. 또한 문제에서 K가 연속으로 붙어있는경우도 존재한다. 그러므로, K가 1개, 2개, 3개...8개 사용했을때 모든경우의수를.. 2021. 6. 24.
백준 1351 - 무한수열 - swift https://www.acmicpc.net/problem/1351 1351번: 무한 수열 첫째 줄에 3개의 정수 N, P, Q가 주어진다. www.acmicpc.net 선뜻보면 감이안온다. 심지어 N이 1조이다. 1부터 증가시켜서 찾을수도없다. 이 수열은 분명 재사용되는 값이 존재할 것 같지만, N이 1조안에서 dp를 적용해도 효율적일까 싶다. 결론은 효율적인데, 그 이유는 P와 Q의 범위를 보고 알 수 있다. P,Q는 최소 2이상이다. 또한 수열특징이 P or Q로 나눈 값이다. 즉, 최소 P,Q가 2라고 가정했을때, 매번 2로 나누어진다는 점이고, 이는 log2 로 계산할수있다. 즉, log2 ( 1조 ) 는 약 39로, 39번의 횟수로 1조에서시작하여 0으로 도착하는걸 알 수 있다. 2로 했는데도 .. 2021. 6. 24.