본문 바로가기

전체 글188

[Swift 알고리즘] 백준 11653 (소인수분해) https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 해결 방법 : 소수 찾고 수수를 통해서 계산 func sol4() { let n = Int(readLine()!)! if n == 1 { return } else if n < 4 { print(n) return } var targetArr: [Bool] = Array(repeating: true, count: n + 1) for i in 2...Int(sqrt(Double(n))) { if targetArr[i] == true { var tempInd = i + i while tempInd 2023. 6. 15.
[Swift 알고리즘] 프로그래머스 154538 (숫자 변환하기) https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 방법 BottomUP으로 했는데 시간초과 나서 TopDown 방식으로 고쳐봤습니다. 제 생각에는 BottomUp도 문제 없을 것 같습니다. 1. Queue를 쓰기 힘드니 ind를 통해 Queue를 구현하wk. - removeFirst()의 경우 timeComplexity의 경우O(n)이다. 2. Set.contains의 경우 complexity가 O(n)이기에 hash를 이용하자 impo.. 2023. 6. 14.
[Swift 알고리즘] 프로그래머스 148653(마법의 엘리베이터) 문제 설명 마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다. 탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특별합니다. 마법의 엘리베이터에는 -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼이 있습니다. 마법의 엘리베이터의 버튼을 누르면 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동하게 됩니다. 단, 엘리베이터가 위치해 있는 층과 버튼의 값을 더한 결과가 0보다 작으면 엘리베이터는 움직이지 않습니다. 민수의 세계에서는 0층이 가장 아래층이며 엘리베이터는 현재 민수가 있는 층에 있습니다. 마법의 엘리베이터를 움직이기 위해서 버튼 한 번당 마법의 돌 한 개.. 2023. 6. 13.
[Swift 알고리즘] 백준 2225 합분해 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 출력 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. 해결 방법 DP를 사용해서 풀어야 한다. 우리가 생각할 것 1. 숫자를 몇개 사용하여 만들 지 상상해봅시다 1개 0을 만드는데 한.. 2023. 6. 12.
[Swift 알고리즘] 백준 4396 지뢰찾기 https://www.acmicpc.net/problem/4396 4396번: 지뢰 찾기 지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어 www.acmicpc.net 해결 방법 : [1 -1] [1 0] [1 1] [0 -1] [0 0] [0 1] [-1 -1] [-1 0] [-1 1] 의 따로 배열을 만들고 생각해서 풀었습니다. 이 배열을 rcVal이라고 가정합니다. 1. 우리가 궁금한 것은 지뢰근처에 숫자를 표기하는 것 입니다. if mine[i][j] == "*" 2. 그리고 궁금한 것은 지뢰에서 상화좌우 및 대각선까지 값을 넣을 수 있는지 아닌지가 궁금합.. 2023. 6. 11.
[Swift 알고리즘] 백준 2578 (빙고) https://www.acmicpc.net/problem/2578 2578번: 빙고 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 www.acmicpc.net 해결 방법 : 부른 자리에서 상 하 좌 우로 dfs를 통해 계산합니다. 아래는 isBing이라는 dfs 함수입니다. axis와 vector라는 파라미터로 row혹은 col로, 양수 방향 혹은 음수 방향으로 갈 지를 정합니다. func isBing(_ rowVal: Int, _ colVal: Int, _ axis: Int, _ vector: Int) -> Bool { //axis 0이면 row 1이면 col if.. 2023. 6. 8.
[Swift 알고리즘] 백준_1991(트리 순회) https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식) 중위 순회한 결과 : DBAECFG // (왼쪽 자식.. 2023. 5. 24.
[Swift 알고리즘] 백준_11279 (최대 힙) https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 배열에 자연수 x를 넣는다. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 입력 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 .. 2023. 5. 23.
[Swfit 알고리즘]LCS에 대해서 정확한 설명 https://velog.io/@emplam27/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-LCS-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Longest-Common-Substring%EC%99%80-Longest-Common-Subsequence [알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Comm.. 2023. 5. 19.
[Swift 알고리즘] 백준 9935 (문자열 폭발) https://www.acmicpc.net/problem/9935 상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다. 폭발은 다음과 같은 과정으로 진행된다. 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다. 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다. 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다. 상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다. 폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다. 입력 첫째 줄에 문자.. 2023. 5. 18.
[Swift 알고리즘] 프로그래머스 다리를 지나는 트럭 https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 방법: 자동차 길이를 1로 생각해보자. 자동차가 3의 길을 지난다고 상상해보자 그러면 시간대 대로 그리게 된다면 이렇게 된다 0초 : ⬜️ | ⬜️ ⬜️ ⬜️ | ⬛️ 1초 : ⬜️ | ⬜️ ⬜️ ⬛️ | ⬜️ 2초 : ⬜️ | ⬜️ ⬛️ ⬜️| ⬜️ 3초 : ⬜️ | ⬛️ ⬜️ ⬜️| ⬜️ 4초 : ⬛️ | ⬜️ ⬜️ ⬜️| ⬜️ 이 그림을 보면 알 수 있듯이 자동차가 시작지점에서는 0초에.. 2023. 5. 16.
[Swift 알고리즘] 디스크 컨트롤러 https://school.programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이방법 : 0. 제일 중요 인풋갑인 Jobs는 정렬된 값이 아니다. 무슨 말 이냐면 jobs = [[0, 10] , [1, 20] ,[3, 40]] 이렇게 정렬 될 수도 있지만, jobs = [[4,10], [1, 2], [0, 20]] 일 수도 있다. 1. 이것은 readyQueue를 구현하여 계산한다. - readyQeuue는 실행 순서대로 정렬한다. - 만약 실행순서가 같을 경우, 먼저 들.. 2023. 5. 15.