본문 바로가기

분류 전체보기

(358)
BOJ-25682 체스판 다시 칠하기 2 Swift 문제지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 K×K 크기의 체스판으로 만들려고 한다.체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 K×K 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 K×K ..
BOJ-오아시스 재결합 Swift 문제오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다.이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 백준이는 갑자기 자기가 볼 수 있는 사람의 수가 궁금해 졌다.두 사람 A와 B가 서로 볼 수 있으려면, 두 사람 사이에 A 또는 B보다 키가 큰 사람이 없어야 한다.줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000)둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231 나노미터 보다 작다.사람들이 서 있는 순서대로 입력이 주어진다.출력서로 볼 수 있는 쌍의 수를 출력한다.내가 푼 풀이접근방법: 스택스택을 이용..
BOJ-17299 오등큰수 Swift 문제크기가 N인 수열 A = $A_{1}, A_{2}, ..., A_{N}$이 있다. 수열의 각 원소 Ai에 대해서 오등큰수 NGF(i)를 구하려고 한다.$A_{i}$가 수열 A에서 등장한 횟수를 F($A_{i}$)라고 했을 때, $A_{i}$의 오등큰수는 오른쪽에 있으면서 수열 A에서 등장한 횟수가 F($A_{i}$)보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오등큰수는 -1이다.예를 들어, A = [1, 1, 2, 3, 4, 2, 1]인 경우 F(1) = 3, F(2) = 2, F(3) = 1, F(4) = 1이다. $A_{1}$의 오른쪽에 있으면서 등장한 횟수가 3보다 큰 수는 없기 때문에, NGF(1) = -1이다. $A_{3}$의 경우에는 $A_{7}$이 오른쪽..
BOJ-9935 문자열 폭발 Swift 문제상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.폭발은 다음과 같은 과정으로 진행된다.문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.입력첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작..
iOS 다크모드 설정을 3개 옵션으로 나눠서 적용하자 이번에 앱 만드는 과정에서 다크모드를 설정하는 기능을 구현하고자 했습니다. 다크모드는 iOS13부터 적용되어 각각 사용자의 화면모드에 맞춰서 다크모드를 설정할 수 도있지만,사용자의 모드와 상관없이 앱의 다크모드를 설정하려면 추가옵션이 필요하다고 느꼈습니다.다크모드 옵션사용자 지정(사용자의 화면모드에 맞춰짐)다크모드라이트모드이 세 가지를 구현하고자 합니다 이전 포스팅에서 봤을지 모르지만 UserDefaults를 이용하여 매번 뷰컨트롤에서 다크모드 값을 확인하고 그리는 방식을 사용했었습니다.  다크모드 값을 유저디폴트로 저장하고 settingUI 함수를 매번 뷰 그릴 때마다 호출하곤 했습니다.이는 뷰컨이 많아지고, 여러 사람들과 함께 작업을 한다면, 불필요한 코드임을 느끼고 다른 방법을 사용하고자 합니다.위..
iOS 다크모드에 관하여 다크모드 라이트모드다크모드iOS13부터 다크모드가 나왔습니다.핸드폰의 밝기테마인데, 어두운 곳에서 라이트모드면 눈이 부셔서 다크모드를 자주 애용했습니다.이에 따라 앱도 다크모드를 지원하게 되었는데, 앱을 만들면서 다크모드를 어떻게 적용시킬까에 대해 알아보려고 합니다. 시도해 본 방법: UserDefaults를 이용한 다크모드 설정값 저장다크모드라 해서 크게 생각하지 않고, 밝은 테마를 어둡게, 어두운 테마를 밝게 UI를 그려보자고 생각했습니다.사용자가 원하는 테마에 맞춰서 뷰가 그려질 때, 입맛에 맞게끔 그리는 것이지요그래서 뷰마다 다크모드 설정값을 불러오기 위해 싱글톤구조로 불러오기 쉽게끔 구현했습니다. 싱글톤을 통해 UserDefaults값을 불러와 viewdidLoad() 혹은 viewWillApp..
BOJ-11444 피보나치 수 6 Swift 문제피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.n=17일때 까지 피보나치 수를 써보면 다음과 같다.0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.출력첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다.내가 푼 풀이문제를 보았을때 이문제는..
BOJ-10830 행렬 제곱 Swift 문제크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.입력첫째 줄에 행렬의 크기 N과 B가 주어진다. (2 ≤ N ≤  5, 1 ≤ B ≤ 100,000,000,000)둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다.출력첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다.내가 푼 풀이접근방법: 분할정복첫번째로 행렬의 곱셈을 먼저 구현한다. (for 3중반복문)거듭제곱을 그대로 곱하면 1000억번 연산해야하므로 시간초과가 무조건 난다.여기서 거듭제곱을 지수법칙을 적용해 분할정복 형식으로 곱한다. $..