⚙️ 알고리즘 59

[Swift] 백준 21921 - 블로그

문제 https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 시간초과 풀이 1 (투포인터 사용) 더보기 import Foundation let input = readLine()!.split(separator:" ").map { Int(String($0))! } let n = input[0], x = input[1] let arr = readLine()!.split(separator:" ").map { Int(String($0))! } var s..

[Swift] 백준 DP 문제 풀이 (2839, 1463, 1003, 11726, 9465, 1890, 12865, 15486)

🥺 DP가 너무 약한자의 DP 조지기 https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1 https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_2 해당 링크의 문제들을 도장깨기 하듯? 풀었고 풀이는 주석으로 달아두었습니다. 2839 https://www.acmicpc.net/problem/2839 내 풀이 import Foundation let n = Int(readLine()!)! var dp = Array(repeating: 0, count:5001) for i in 3...n { if i%3 == 0 { dp[i] = dp[i-3] + 1 // 3으로 나누어떨어질..

[Swift] 백준 16234 - 인구 이동

문제 https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 내 풀이 1. 틀잡기 import Foundation let input = readLine()!.split(separator:" ").map { Int(String($0))! } let n = input[0], l = input[1], r = input[2] var board:[[Int]] = [] var dx = [-1, 1, 0, 0] var dy = [0, 0, -1, 1..

[Swift] 백준 1713 - 후보 추천하기

문제 : https://www.acmicpc.net/problem/1713 1713번: 후보 추천하기 첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대 www.acmicpc.net 내 풀이 import Foundation let n = Int(readLine()!)! let m = Int(readLine()!)! //추천 횟수 let nums = readLine()!.split(separator:" ").map { Int(String($0))! } var stack:[Int] = [] //사진틀 (스택) var count:[Int] = Array(repea..

[알고리즘] 시간복잡도, 코딩테스트 알고리즘 요약 정리

문제를 보면 입력 데이터의 개수를 보고 시간복잡도부터 계산하자 (코테의 가장 기본) 1초 = 1억번 연산 임을 인지하고 이를 토대로 시간복잡도를 계산하여, 시간초과가 나지 않을 적절한 알고리즘을 선택해야함 보통 프로그래머스의 경우 명시를 해두지 않았다면 제한 시간이 10초 라고 한다. O(1): 입력 데이터의 개수와 상관없이 항상 상수의 시간을 가지는 알고리즘 (ex. 배열의 마지막 수 꺼내오기, 해시 테이블 삽입/삭제/검색) O(logn): 크기가 커지면 커질수록 처리 시간이 절반으로 줄어드는 알고리즘 (ex. 이분탐색, 힙(우선순위 큐)) O(n): 입력 데이터의 개수만큼 시간이 소요되는 알고리즘 (ex. for문 1개, 배열/문자열 탐색, 배열/문자열 재정렬, set()으로 중복 제거) O(nlog..

[백준/Swift] 1620 - 나는야 포켓몬 마스터 이다솜

문제 : https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 처음 풀이 : let input = readLine()!.split(separator:" ").map { Int(String($0))! } let N = input[0] let M = input[1] var dic:[Int:String] = [:] var answer:[String] = [] for i in 1...N { dic[i] = readLine()! ..

[백준/Swift] 2346 - 풍선 터뜨리기

문제 : https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 내 풀이 import Foundation let N = Int(readLine()!)! let input = readLine()!.split(separator:" ").map { Int(String($0))!} var q = (1...N).map { ($0, input[$0-1])} /* q는 아래와 같이 초기화하는 것도 가능함! (enumerated() 사용) 1) v..

[Swift] 프로그래머스 - [1차] 비밀지도

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 - 엄청 문제 그대로 날것으로 풀었다.. 허허 func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] { var arr1 = arr1.map { String($0, radix: 2)} //2진수로 변환 var arr2 = arr2.map { String($0, radix: 2)} var answer: [String] ..

[Swift] 조합(combination), 순열(permutation)

✅ 조합 vs 순열 차이 - 순열 : AB, BA가 다름 (순서가 중요하기 때문에) - 조합 : AB, BA가 똑같음 (순서가 중요하지 않음) 예를들어 자물쇠 번호를 123으로 해야만 풀리고 321로는 풀리지 않듯이, 순서가 중요한 것이 순열이며 샐러드에 닭가슴살을 넣은 다음 드레싱을 넣든, 드레싱을 넣은 다음 닭가슴살을 넣든 결과는 똑같기 때문에 순서는 중요하지 않는 것이 조합이다. 조합 - 순서와 상관없이, 중복 없이 n개중에 r개를 선택한 경우들을 나열 - 예를들어 [1, 2, 3]에서 서로 다른 2개의 원소를 뽑아 나열하는 경우, 중복을 고려해야하기 때문에 (1, 2), (1, 3), (2, 3)의 경우의 수가 존재한다. - 조합 공식 : func combi(_ nums: [Int], _ targ..

반응형