분류 전체보기 (83) 썸네일형 리스트형 [iOS/UIKit] Keyframe Animation 으로 연속적인 변화를 Animate 하기 UIView.animateKeyframes 한 개 또는 여러개의 Keyframe 으로 구성된 Animation 을 동작시킨다. func changeSummary(to summaryText: String) { UIView.animateKeyframes( withDuration: 1.0, delay: 0, animations: { [summary = self.summary!] in // Move label upward. UIView.addKeyframe( withRelativeStartTime: 0, relativeDuration: 0.5, animations: { summary.center.y -= 100 } ) // Move label down. UIView.addKeyframe( withRelative.. [프로그래머스] 괄호 변환 - 분할 정복 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 괄호 변환(링크) 접근 방법 문제에서 괄호를 재귀적으로 변환하는 방법에 대한 가이드 라인이 주어져 코드에서도 똑같이 이해되도록 구현했다. C++ 코드 iterator.end() 는 해당 컨테이너의 마지만 원소 바로 다음 위치를 가르킨다. string::append 함수를 이어붙여 호출하면 코드가 간결하고 더 직관적이다. #include #include using namespace std; bool isCorrect(string p) { int correct = 0; for (const auto& e: p) { e == '(' ? correct += 1 : correct -= 1; if (correct < 0) return false; } re.. [iOS/UIKit] Fade 효과로 Transform Animation 구현하기 Transform Transform (변형) 은 크게 다음 3가지로 분류할 수 있다. 1. 회전 (Rotation) 2. 확대/축소 (Scale) 3. 옮김 (Translation) 원하는 변형 방법을 Fade 효과와 함께 사용할 수 있다. 아래 예시에서는 Translation 을 이용해본다. Label 을 이동(Translation)시키며 fade 효과로 전환하기 1. 보조 라벨(변경된 텍스트를 가진)을 투명하게 하여 기존 라벨 위치에 놓은 뒤 옆이나 위 아래로 translation 한다. 2. 기존의 라벨의 alpha 값을 0으로 바꾸며(Fade out) 보조 라벨이 translation 된 위치로 이동한다. 3. 보조 라벨을 Fade in하며 원래의 위치 (기존 라벨이 있던 위치) 로 옮긴다. 4... [iOS/UIKit] Fade 효과로 화면 전환하기 Fade 효과로 화면 전환 1. 바꿀 화면을 얹은 View 를 생성하고 alpha 값을 0 (투명한 화면이 된다.) 으로 하여 현재 화면에 올린다. 2. withDuration 을 조절해 천천히 alpha 값을 1로 만든다. 3. 현재 화면을 바꿀 화면으로 바꾼 뒤 올린 View를 제거한다. func fade(to image: UIImage, showEffects: Bool) { // Create & Set up temp view. let tempView = UIImageView(frame: background.frame) tempView.image = image tempView.alpha = 0 background.superview!.insertSubview(tempView, aboveSubview: .. [프로그래머스] 점프와 순간이동 - 분할 정복, 재귀 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 점프와 순간 이동(링크) 접근 방법 주어진 그대로 시작 위치에서 출발하며 규칙을 찾으려고 했다. 순간 이동을 위해서 이동한 거리가 필요하니까 처음 한 칸을 점프하고 순간 이동으로 N까지 최대한 가깝게 이동한 후 점프로 마무리하는 가장 단순한 접근에서 부터 각 위치에서도 점프를 하느냐 마느냐에 따라 결과가 달라지므로 각 위치에서 재귀적으로 점프와 순간 이동을 하려고 생각했지만 너무 많은 경우의 수가 있고 입력이 10억 이하의 자연수인 만큼 모든 위치를 평가해 보기에는 힘들 것 같았다. 풀이 N에 도달하기 위해서 N / 2 위치에서 순간 이동하고 N / 2에 도달하기 위해 N / 4 위치에서 순간 이동 해야 한다. 재귀적으로 생각하면, 어떤 목적.. [프로그래머스] 수식 최대화 - 완전 탐색 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 수식 최대화(링크) 풀이 연산자는 *, +, - 세 개이므로 가능한 우선 순위는 총 6가지이다. 주어지는 문자열은 길이 100 이하로 모두 검사하기 쉬운 분량이므로 가능한 우선 순위를 모두 확인한다. 나는 "*+-" 문자열 변수를 선언한 뒤 next_permutation() 으로 가능한 순서를 모두 나열하게 했다. 처음엔 주어진 문자열 그대로 우선순위에 따라 계산하고 결과를 다시 문자열에 붙여 넣는 방식으로 하나하나 계산하려 했다. 과정이 명시적이고 문자열 출력을 통해 진행 상황을 확인하기 쉽지만 문자열을 고쳐 넣는 과정이 포함되어서 불필요하게 코드가 길어진다. 또한, 중간에 음의 부호를 가지는 숫자를 삽입할 때 부호가 아닌 연산자와 구분하기.. [프로그래머스] 카펫 - 완전 탐색 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 카펫(링크) 풀이 (갈색 격자 + 노랑 격자 = 총 격자 개수) 이므로 가능한 가로 격자, 세로 격자의 개수들을 알 수 있다. 여기에 ((가로 격자 - 2) * (세로 격자 - 2) = 노랑 격자) 라는 사실을 추가하면 정답이 되는 가로, 세로 격자의 개수를 알 수 있다. C++ 코드 #include #include using namespace std; vector solution(int brown, int yellow) { int check, total = brown + yellow; vector ans(2); for (int h = 3; h [프로그래머스] 소수 찾기 - 완전 탐색, 재귀, 소수 판별법 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 소수 찾기(링크) 풀이 주어지는 숫자 문자열의 숫자들 각각에 대해 사용하거나 사용하지 않은 경우로 정답 후보를 만들어 소수 판별을 진행한다. 재귀 함수의 입력으로 숫자 문자열을 받으면 앞에서 숫자를 하나 떼어내 소수 후보 문자열에 이어 붙여 소수인지 판별하고, 정답 후보에 추가된 숫자를 제외한 나머지 숫자 문자열로 함수를 재귀 호출한다. 디버깅 "011" 과 "11" 은 다른 문자열이므로 별개의 경우로 판단하지만 사실 같은 소수인 11이다. 다음과 같이 정수 변환 후 비교해 같은 경우로 판단했다. if (stoi(candidate) == stoi(answers[i])) 개선한 코드 소수 판별을 아무 생각없이 목표 숫자의 절반까지의 자연수로 모.. 이전 1 ··· 4 5 6 7 8 9 10 11 다음