본문 바로가기

전체 글15

[Thirty Days of Metal] Day3-Commands 원문: Thirty Days of Metal-Day 3: Commands 위 글을 공부하고 요약했습니다. device를 만들고 GPU 메모리를 할당하는 것도 중요하지만, GPU에게 일을 시키려면 그것의 언어를 배워야 한다. 명령하는 법을 배워보자. What are Commands? Metal에는 데이터를 제공하고 모양을 그려내는 걸 동시에 하는 함수가 없고 둘은 구분된 동작이다. 두 점을 가진 버퍼가 있고 선 하나를 그린다고 해보자. 먼저 Metal에게 어떤 버퍼가 선 데이터를 가질지 알려준다. 그 후 선을 그리라고 해야 한다. 수도코드로 다음과 같다. commandList.setBuffer(pointBuffer) commandList.drawLines(1) 실제 코드는 아니지만 매우 일반적인 패턴이다... 2023. 1. 1.
[Thirty Days of Metal] Day2-Buffers 원문: Thirty Days of Metal-Day 2: Buffers 위 글을 공부하고 요약했습니다. 버퍼는 그래픽 프로그래밍에서 필수적이다. GPU가 작동하는 데이터를 가지고 있기 때문이다. Data Metal에서 선을 그리려면 버퍼에 선의 정점을 저장하고 해당 버퍼 안에 데이터를 기반으로 선을 그리도록 GPU에게 명령해야 한다. Creating a Buffer device의 makeBuffer(length:options:) 메서드를 사용해 버퍼를 만든다. let buffer = device.makeBuffer(length: 16, options: [])! length: 바이트 단위로 버퍼 메모리의 크기 option: 버퍼를 만들 때 조절할 수 있는 것들. 여기서는 비워둔다. Copying Data .. 2022. 12. 31.
[Thirty Days of Metal] Day1-Devices 원문: Thirty Days of Metal—Day 1: Devices 위 글을 공부하고 요약했습니다. Metal 그래픽 프레임워크. GPU를 프로그래밍할 수 있게 해준다. 다른 그래픽 프레임워크들과 다르게 더 저수준의 이해가 필요. Devices device는 아이폰이나 맥 안에 GPU의 추상적인 개념이다. MTLDevice 프로토콜을 따르는 객체이고 GPU 리소스를 할당하기 위한 메서드를 포함한다. Getting a Device 가장 먼저 Metal 프레임워크를 import 해 컴파일러가 Metal의 타입과 함수를 찾을 수 있게 한다. import Metal MTLCreateSystemDefaultDevice() 함수로 default device를 얻을 수 있다. 시스템이 Metal을 지원하지 않으면.. 2022. 12. 31.
[프로그래머스] (Swift) 순위 문제 보러가기 문제 읽기 n 명의 권투선수들이 1대1로 대결한다. a가 b보다 순위가 높다면 a는 b를 항상 이긴다. 경기 결과에는 모순이 없다. a가 b를 이기고 b가 c를 이겼는데 c가 a를 이기는 결과는 없다. 경기 결과를 몇 개 잃어버려서, 전체 순위를 정확하게 매길 수 없다. 주어진 결과만을 가지고 순위를 확정할 수 있는 선수의 수를 구하자. 생각하기 처음에 생각했던 방법은 다음과 같다. 이차원 배열에 각 선수별로 가능한 등수 [1…n] 저장해두기 다른 이차원 배열에 결과 저장하면서 이겼다면 가능한 등수를 뒤에서 빼고 졌다면 앞에서 빼기 가능한 등수가 하나 남은 선수 확정짓기 그 선수와 관련된 선수들의 가능한 등수 정리하기 바꾸는 게 없을 때까지 3, 4번 과정을 반복하기 여기서 문제는 2번이었.. 2022. 11. 16.
[프로그래머스] (Swift) 위장 문제 보러 가기 문제 스파이들이 여러 종류의 옷들을 겹치지 않게 입으려고 한다. 각 종류당 하나의 옷을 입을 수 있고 입지 않는 종류가 있어도 괜찮다. 하지만 최소 한 개의 종류는 입어야 한다. 해결 Dictionary 만들기 의상 이름, 종류 순으로 String 배열이 들어오는데 총 조합의 개수만 알아내면 되므로 이름은 신경쓰지 않아도 된다. 같은 종류에 새로운 이름이 들어올 때마다 value를 +1 해준다. Dictionary에 종류를 key, 개수를 value로 저장해준다. 경우의 수 구하기 어떤 수의 약수의 개수는 소인수분해 후 각 밑의 지수 + 1끼리의 곱으로 구할 수 있다. 각 밑을 0번, 1번, 2번, … n번 사용해 수를 만들 수 있기 때문이다. 같은 원리를 사용한다. 한 종류 안에서 n개.. 2022. 10. 5.
[LeetCode] (Swift) 13. Roman to Integer 문제 보러 가기 문제 로마 숫자는 7가지 다른 문자로 표현된다: I, V, X, L, C, D, M 각 문자가 나타내는 숫자는 다음과 같다. 예를 들어, 2는 1 + 1 이므로 II 12는 10 + 2 이므로 XII 27은 20 + 5 + 2 이므로 XXVII. 로마 숫자는 주로 왼쪽부터 오른쪽으로, 큰 숫자에서 작은 숫자로 쓴다. 하지만 4는 IIII 로 쓰지 않고 1을 5 앞에 쓰고 5 - 1 을 해 IV 로 쓴다. 같은 원리로 9는 10 - 1 이므로 IX 로 쓴다. 빼기를 사용하는 여섯 가지 경우가 있다. V 와 X 앞에 I : 4, 9 L과 C 앞에 X: 40, 90 D와 M 앞에 C: 400, 900 → 로마 숫자가 주어지면 정수로 변환해라. 풀이 오른쪽으로 가면 숫자가 작아져야 하는데 여섯 .. 2022. 9. 14.