본문 바로가기

개발158

[Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) 이번 포스트에서는 Win32 GUI프로그래밍을 공부하면서 거의 처음으로 배우는 내용인 윈도우가 닫힐 때 일어나는 일에 대해서 알아보겠다. 쌩으로 Win32부터 MFC, WTL까지 하다보니 좀 오래전에 공부해서 인지 가물가물하여 다시한번 리마인드 차원에서 정리해본다. Windows에서 창의 닫기 버튼을 눌렀을때 어떤일이 발생할까? 사용자가 닫기창이 눌렸을 때, 개발자는 많은 것을 고려해야 할 수 있다. 단순히 창을 hide할 것인지, 정말로 프로그램을 종료할 것 인지? 종료한다면 메모리정리, 리소스 정리, 사용자가 작업한 내용, 프로그램의 상태등을 안전하게 정리할 것인지 고려 해야 할 수 있을 것 이다. 닫기동작은 나름 그래서 중요하다고 생각한다. 그럼 닫기 버튼을 눌렀을 때 어떤 일이 발생할까? http.. 2022. 7. 31.
백준 - 보물 - 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.