본문 바로가기

개발166

백준 - 보물 - Swift 수학 그리디 알고리즘 정렬 import Foundation let N = Int(readLine()!)! let arrayA = readLine()!.split(separator: " ").map{Int(String($0))!} let arrayB = readLine()!.split(separator: " ").map{Int(String($0))!} let sortedA = arrayA.sorted(by: { $0 $1}) var sum = 0 for i in 0 ..< N { sum += sortedA[i] * sortedB[i] } print(sum) https://www.acmicpc.net/problem/1026 1.. 2022. 7. 10.
백준 - 회의실 배정 - Swift https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 그리디 알고리즘 정렬 import Foundation let N = Int(readLine()!)! var meetings:[[Int]] = [] for _ in 0 ..< N { var meeting:[Int] = [] meeting = readLine()!.split(separator: " ").map{Int(String($0))!} meetings.append([meeting[0],meeting[1]]) } let sorted = meetings.sorted(by: {( $0[1],$0[0]) < ($1[1.. 2022. 7. 10.
백준 - 동전 0 - Swift https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 그리디 알고리즘 import Foundation let input1 = readLine()!.split(separator: " ").map{Int(String($0))!} let kindsOfCoin = input1[0] let valueOfCoin = input1[1] var coins:[Int] = [] for _ in 0 ..<.. 2022. 7. 10.
백준 - ATM - Swift https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 그리디 알고리즘 정렬 import Foundation let N = Int(readLine()!)! var times = readLine()!.split(separator: " ").map{Int(String($0))!} var sorted = times.sorted(by: 2022. 7. 10.
백준 - 설탕 배달 - Swift https://www.acmicpc.net/problem/2839 수학 다이나믹 프로그래밍 그리디 알고리즘 import Foundation var kgSugar = Int(readLine()!)! var bags = 0 while kgSugar >= 0 { if kgSugar % 5 == 0 { bags += kgSugar / 5 print(bags) exit(0) } kgSugar -= 3 bags += 1 } print(-1) exit(0) 2022. 7. 10.
Swift 프로그램 종료하기 exit(0) Swift문법을 공부할 겸 Swift로 코딩테스트 문제들을 풀어보고 있다. 그 중 난해한 점이 있는데 바로 프로그램 종료이다. Swift는 main.swift에서 글로벌로 실행되어 따로 main함수가 없다. C같으면 return 0 로 메인함수를 종료 시켜 프로그램을 종료시킬 수 있지만 도대체 swift는 어떻게 프로그램을 종료시킬까? 찾아보니 간단하게 exit(0) 함수를 호출하여 종료 할 수 있다고 한다. 단, 주의 할 점은 Foundation을 import해야한다. 다음은 프로그램 종료 예시 이다. import Foundation var kgSugar = Int(readLine()!)! var bags = 0 while kgSugar >= 0 { if kgSugar % 5 == 0 { bags +=.. 2022. 7. 9.
Swift 삽입정렬, 선택정렬, 퀵 정렬 Swift 언어에 좀 익숙해 보고자 알고리즘에서 제일 처음에 나오는 정렬 코드를 짜보았다. 간단하게 함수, 배열, 조건문, 반복문 등을 익일 수 있었다. 1. 삽입정렬 func insertionSort(arr: inout [Int]) { for i in 1 .. 0 && arr[j - 1] > key { arr.swapAt(j - 1 , j) j-=1 } arr[j] = key } return } 2. 선택정렬 func selectionSort(arr: inout [Int]) { for i in 0 ..< arr.count { var min = i for j in i ..< arr.count { if arr[min].. 2022. 7. 3.
HIWORD, LOWORD 매크로, DWORD 쪼개기 Windows 프로그래밍을 하다보면 32bit 자료형인 DWORD를 쪼개야 할때가 생긴다. 예를 들면 WM_LBUTTONDOWN와 같은 마우스 메시지의 lParam변수에는 마우스 좌표가 들어 있는데, X축은 하위 16비트, Y축은 상위 16비트에 존재 한다. 이때 상위, 하위 16비트를 쪼개어야 X축 Y축을 알 수 있다. 그렇다면 대충 코드 비트연산을 다음과 같이 할 수 있을 것이다. DWORD dwXPos = ((((DWORD)lParam)) & 0xffff); DWORD dwYPos = ((((DWORD)lParam >> 16)) & 0xffff); 이렇게 할 수 있지만 상당히 거추장스러운 코드 처럼 보인다. 이렇게 가독성이 떨어지는 코드를 막기위해 Windows SDK에서는 매크로를 정의해 놓았다... 2022. 6. 16.
우분투 윈도우 듀얼부팅 시간 차이 문제 해결 씽크패드 E14에 추가로 SSD를 설치하고 나서 용량이 매우 널널해 졌다. 기존 250GB에 500GB가 추가 되었으니 이제 리눅스도 듀얼 부팅으로 설치 해 볼 수 있지 않을까? 하는 생각에 남는 공간에 리눅스를 설치하여 윈도우 11과 우분투 20.04 LTS버전을 듀얼 부팅으로 사용하게 되었다. 그런데 문제가 생겼다. 바로 윈도우와 리눅스간 시간차이가 발생하는 것이었다. 이런 문제는 과거 해킨토시를 윈도우와 듀얼 부팅으로 사용할때 겪은 문제 였는데 리눅스와 사용할 때도 발생 하는 것이 었다. 이러한 문제가 발생 하는 원인은 리눅스와 윈도우가 시간을 가져오는 방식에 있다고한다. 윈도우는 메인보드 시간을 그대로 가져오는 반면, 리눅스는 메인보드 시간에 현재 시간대의 오프셋을 더하여 시간을 가져오게 된다. .. 2022. 4. 2.