본문 바로가기
반응형

전체 글282

[Swift] 비트 연산과 비트마스킹 (NOT, AND, OR, XOR, 시프트 등) 오늘도 PS를 위한 문법, 비트 연산자이다. 비트 연산은 거의 비트마스킹에 쓰기 때문에 비트마스킹에 활용하는 방법까지 엮어서! Bitwise Operators NOT ( ~ ) 모든 비트를 반대로 뒤집어버린다. 0은 1로 만들고, 반대로 1은 0으로 만든다. 연산자는 ~이다. let A: UInt8 = 0b00110011 // 0011 0011 let notA = ~A // 1100 1100 AND ( & ) 둘 다 1인 경우에만 1이고, 나머지 경우는 모두 0으로 만든다. 연산자는 &이다. let A: UInt8 = 0b00110011 // 0011 0011 let B: UInt8 = 0b01010101 // 0101 0101 let AandB = A & B // 0001 0001 OR ( | ) 둘 .. 2022. 1. 17.
[Swift] 진수 변환하기 (2진수, 8진수, 10진수, 16진수 등) PS를 위한 문법~ 이번엔 진수 변환이다. 브론즈~실버에서 가끔 진수 변환이 필요한 문제가 있다. 물론 직접 구현해도 되지만..! 이미 라이브러리에 편하게 메소드가 있다ㅎㅎ Int의 이니셜라이저 중에 문자열과 기수(radix)를 받아 문자열로 표현된 radix진수 → Int로 만들어주는 init(_:radix:)가 있다. 주의할 점은 변환에 실패할 수도 있기 때문에 Failable Initializer이라는 점이다. 옵셔널 타입으로 만들어주므로 옵셔널 바인딩을 하거나 강제 언래핑을 해서 사용해야 함. init?(_ text: S, radix: Int = 10) where S : StringProtocol 또 String의 이니셜라이저 중에 정수와 기수(radix)를 받아 정수 → radix진수 문자열로 .. 2022. 1. 17.
백준 2178번 미로 탐색 - 스위프트(Swift) 풀이 + 그림 설명 1. 1인 칸은 그래프의 정점으로 생각한다. 2. 인접한 칸이 1이면 그 칸으로 가는 간선을 추가한다. 3. 완성된 그래프에서 정점 (1, 1)에서 (N, M)으로 가는 최단거리를 구한다. 모든 간선의 길이가 1이므로 BFS를 사용한다. 1. 1인 칸은 그래프의 정점으로 생각한다. 현재 상황을 그래프로 나타낼 수 있다. 0인 칸은 어차피 갈 수 없는 칸이므로 무시하고, 1인 칸들을 정점이라고 생각하자. 2. 인접한 칸이 1이면 그 칸으로 가는 간선을 추가한다. 인접한 칸이 1이면 해당 칸으로 이동할 수 있다. 이것을 그래프에 표현해주면 인접한 칸으로 가는 간선을 추가하는 것과 같다. 3. 완성된 그래프에서 정점 (1, 1)에서 (N, M)으로 가는 최단거리를 구한다. 모든 간선의 길이가 1이므로 BFS를.. 2022. 1. 16.
백준 2630번 색종이 만들기 - 스위프트(Swift) 풀이 + 그림 설명 그림부터 너무 분할 정복처럼 생긴 분할 정복 문제. 1. 색종이를 4개로 쪼갠다. 2. 재귀적으로 4개의 조각에 대해 각각 하얀색과 파란색의 개수를 센다. 3. 4개 조각에서 구한 하얀색과 파란색의 개수를 더해 전체 개수를 구한다. 4. 만약 4개 조각이 모두 같은 색인 경우, 같은 색이 4개 있는 것이 아니라 큰 하나의 색종이인 것을 조심한다. 1. 색종이를 4개로 쪼갠다. 모두 같은 색이면 더 이상 자르지 말라고 했다. 하지만 생각을 달리해서 일단 자른 다음에, 모두 같은색이면 다시 붙일 것이다..! 2. 재귀적으로 4개의 조각에 대해 각각 하얀색과 파란색의 개수를 센다. 다음과 같은 함수를 정의했다. 전체 종이에서 (row, col)이 왼쪽 꼭짓점이고, 크기가 size인 조각 내의 (하얀색 수, 파.. 2022. 1. 16.
백준 1764번 듣보잡 - 스위프트(Swift) 풀이 Set의 메소드들이 너무 잘 구현되어 있어서 거저먹을 수 있는 문제. 1. 듣도 못한 사람들로 Set을 만든다. 2. 보도 못한 사람들로 Set을 만든다. 3. 듣도 보도 못한 사람을 두 집합의 intersection(_:)으로 구한다. 4. 듣도 보도 못한 사람을 sorted()로 정렬해서 사전 순으로 출력한다. 1. 듣도 못한 사람들로 Set을 만든다. 이 문제는 교집합을 구하는 문제이다. 딕셔너리나 이분탐색으로 직접 교집합을 구할 수도 있겠지만, 스위프트의 Set에는 이미 intersection 메소드가 있으니 편하게 이걸 사용하기 위해서 Set으로 만들어준다. 2. 보도 못한 사람들로 Set을 만든다. 1번과 마찬가지로 M명을 입력으로 받아 하나의 Set으로 만들어준다. 3. 듣도 못한 사람들도 .. 2022. 1. 16.
반응형