Swift로 알고리즘 풀 때 알아둬야할 것들
·
🖥️ Computer Science/Algorithm
1. Character 타입은 Int로 변환이 불가능하다.let str = "12345"let intValue: Int = Int(str[str.index(str.startIndex, offsetBy: 0)]))! // 에러let intValue: Int = Int(String(str[str.index(str.startIndex, offsetBy: 0)]))! // 정답 2. pow 함수는 첫 번째 인자가 Decimal 타입인데, 그냥 Double 쓰면 됨let a = 10let b = 5let result = Int(pow(Double(a), Double(b)))
Swift로 코드 최적화하기
·
🖥️ Computer Science/Algorithm
백준/프로그래머스 풀다보면서 얻은 Swift 꿀팁 정리(다른 언어도 포함일 수도 ㅇㅇ) 1. 입력 받을 때 map { Int($0)! } 보다는 map { Int(String($0))! }이 더 빠르다.let input = readLine()!.split(separator: " ").map { Int($0)! }vslet input = readLine()!.split(separator: " ").map { Int(String(($0))! }2. 함수 단위로 코드를 실행하면 컴파일러 최적화 측면에서 더 효율적이다.func solve() -> Int { var N = Int(readLine()!)! var crane = readLine()!.split(separator: " ").map { Int..
[프로그래머스] 미로 탈출 (Swift)
·
🖥️ Computer Science/Algorithm
문제 이해 : 출발지를 찾고, 레버를 활성화 시킨 뒤 탈출을 해야 한다. 문제에서 최소 시간을 요구 했으므로 BFS를 사용할 거다. 출발지 -> 레버 찾는데 BFS 1회 동작, 레버 -> 도착지 찾는데 BFS 1회 동작으로 총 2회 BFS를 진행한다. 주요 로직 : Swift에서 문자열 파싱은 아직도 어렵다. 입출력은 다음과 같이 문자열들의 배열이 나온다. ["SOOOL","XXXXO","OOOOO","OXXXX","OOOOE"] Swift에서 문자열에 인덱스 접근이 불가능하기도 하고, separator도 없기 때문에 enumerated 메소드를 사용할 거다. Swift Enumerated enumerated() 메소드는 Array 내의 함수로, (n, x)로 이루어진 쌍의 튜플을 반환한다. n은 0에서..
[백준] 7576, 토마토 (Swift)
·
🖥️ Computer Science/Algorithm
- 일반적인 bfs 사용 시 시간초과 발생 - Queue에 pop 하여 원소를 빼내지 말고, 인덱스적 접근을 할 것 (시간초과 확보 가능) - 입력으로부터 graph 만드는 능력이 아직 부족함 // 24년 겨울 알고리즘 스터디 // BOJ & 프로그래머스 // // Created by 박효준 on 1/10/24. // bfs 탐색 import Foundation let MN = readLine()!.split(separator: " ").map{Int(String($0))!} let M = MN[0], N = MN[1] var graph: [[Int]] = [] let mx = [0,0,-1,1], my = [-1,1,0,0] for _ in 0..= 0 && ny < M { if graph[nx][ny..
[백준] 3151, 합이 0 (Swift)
·
🖥️ Computer Science/Algorithm
투 포인터 & 정렬 문제 // 투 포인터 & 정렬 import Foundation var n = Int(readLine()!)! var input : [Int] = readLine()!.split(separator: " ").map{Int(String($0))!} input.sort() var count : Int = 0 func solve(_ s: inout Int, _ e: inout Int, _ g: Int) { var maxIdx = n while s ..
[백준] 2644, 촌수계산(C++, BFS)
·
🖥️ Computer Science/Algorithm
BFS 기초 문제 풀어보기 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 2644번 : 촌수계산 * 입출력 예시 // 입력 9 7 3 7 1 2 1 3 2 7 2 8 2 9 4 5 4 6 // 출력 3 8과 6일땐 ? => 8에서 6을 못 감 => -1 출력 #include #include #include #include #include #include #include using namespace std; #define M..
[백준] 13414, 수강신청 (C++, 해시맵)
·
🖥️ Computer Science/Algorithm
https://www.acmicpc.net/problem/13414 13414번: 수강신청 입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목 www.acmicpc.net 이번 주 스터디는 내 차례가 되어 조금 더 깊게 이 문제에 대해 공부해봤고, 이 문제를 풀어봄으로써 C++의 STL에 대해 조금 더 알게되었다. #include #include #include #include #include using namespace std; // sort, unordered_map(해시맵), pair, auto, iterator bool compare(const ..
[C언어] 표준 입력 함수, scanf() 함수의 오류 찾기
·
🖥️ Computer Science/Algorithm
오류찾기 다음은 잘못된 코드이다. 왜 그런지 알아보자. 오류를 먼저 찾을 수 있는지 확인해 보고 아래 글을 읽기를 추천한다. #include int main() { char arr[21] = "”; /* 모두 널로 초기화 */ printf("최대 20문자 입력 가능\\n"); printf("(Q 혹은 이 입력 시 종료)\\n"); printf("---------------------\\n"); for(int i=0; i
[백준] 2579번, 계단 오르기 (Java/자바) 동적 계획법 실습
·
🖥️ Computer Science/Algorithm
동적 계획법을 지난 시간에 배웠으니, 그에 맞는 문제를 풀어보려 한다. 백준의 실버3 난이도 DP 알고리즘을 쓰는 '2579번 : 계단 오르기' 문제이다. 문제 규칙 이 문제에서는 규칙을 문제 설명에 명시해 두었다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음다음 계단으로 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다. 마지막 도착 계단은 반드시 밟아야 한다. 동작 원리의 핵심은 2번에 있다. 세 개의 계단을 연속되게 밟으면 안 되고, 한 번에 세 칸 이상씩은 이동할 수 없다는 점이다. 백준에 나와있는 입력 예제이다. 첫 번째 int 변수 n에 계단 개수를 받아주고 계단의 값을 담아..
[알고리즘] DP(Dynamic Programming) 동적 계획법
·
🖥️ Computer Science/Algorithm
이번 주 백준 문제 유형이 자료구조 수업 때 배우지 않은 DP이기에 이를 공부한 바탕으로 DP를 정리해보려 한다. 두괄식으로 먼저 DP를 정의한 문구들을 보고 가자. DP란 ? → *메모이제이션(Memoization) 기법을 이용하며 '하나의 문제는 단 한 번만' 풀도록 하게 하는 알고리즘 * 계산했던 것을 메모리 공간에 기억해 두고, 같은 식을 써야한다면 앞에서 기억한 것을 재사용하는 기법 분할 정복 기법과 DP의 차이점 분할 정복 : 큰 문제를 작은 부분 문제로 나누고, 그 하위 문제를 독립적으로 해결하고 이를 합쳐서 원래 문제를 해결함 동적 계획법(DP) 분할 정복 중복되는 문제 O X 메모이제이션 O (중복 문제의 결과를 저장하고 재활용함) X 문제 분할 방식 문제의 크기와 형태에 따라 다름 동일..
kyxxn
'🖥️ Computer Science/Algorithm' 카테고리의 글 목록