![]() 
                    
                      
                      
                      [Gold V] 탑 - 2493 문제 링크 성능 요약 메모리: 106148 KB, 시간: 380 ms 분류 자료 구조, 스택 문제 설명 KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오른쪽 방향으로 차례로 세우고, 각 탑의 꼭대기에 레이저 송신기를 설치하였다. 모든 탑의 레이저 송신기는 레이저 신호를 지표면과 평행하게 수평 직선의 왼쪽 방향으로 발사하고, 탑의 기둥 모두에는 레이저 신호를 수신하는 장치가 설치되어 있다. 하나의 탑에서 발사된 레이저 신호는 가장 먼저 만나는 단 하나의 탑에서만 수신이 가능하다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      메모리 구조 이번 포스팅은 Swift의 메모리 구조에 관한 내용입니다. 사실 지금까지는 메모리 관리를 신경쓰지 않고 프로젝트들을 진행했었는데, 이번 기회에 공부하여 다음부터는 해당 내용을 적용할 수 있도록 하는 것이 목표입니다. 메모리(RAM)공간은 4가지로 나뉘어져 있습니다. 코드 영역, 데이터 영역, 힙 영역, 스택 영역 다음은 4가지 공간들에 대한 특징입니다. 코드 영역 코드 영역에는 우리가 작성한 소스 코드가 기계어 형태(이진수)로 저장됩니다. CPU는 이 곳에 저장된 명령어를 가져가서 처리합니다. 프로그램의 시작부터 종료까지 메모리에 남아있으며, 컴파일 타임에 결정되고, Read-Only 형태로 저장됩니다. (Read-Only 형태라면 중간에 코드가 변경되지 않기 때문입니다.) 데이터 영역 데이..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      메모이제이션 메모이제이션이란 동일한 계산을 반복할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 실행 속도를 빠르게 하는 기술입니다. 이는 동적 계획법(Dynamic Programming)에서 핵심이 되는 기술입니다. 캐싱이라고 표현되기도 합니다. 예를 들어 재귀 함수를 사용한 피보나치 수열 함수가 있다고 해봅시다. func fibonacci(_ n: Int) -> Int { if n Int { var fiboArray: [Int] = [0, 1] guard n > 1 else { return n } for num in 2...n { fiboArray.append(fiboArray[num - 2] + fiboArray[num - 1]) } return fiboArray..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      코코아팟을 설치할 때 에러가 나타나서 이와 관련된 해결 방법을 작성하고자 합니다. 사실 코코아팟 자체의 설치는 어렵지가 않습니다. 그저 터미널에 해당 명령어를 입력해주면 됩니다. sudo gem install cocoapods 그런데 제 맥북에서 다음과 같은 에러가 발생하였습니다. Building native extensions. This could take a while... ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension. current directory: /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/ext/ffi_c /System/Library/Frameworks/Ruby.fra..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      cocoapods CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 96 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly. 코코아팟이란 Swift와 Objective-C 코코아 프로젝트의 종속성 관리자입니다. 코코아팟은 96,000개의 라이브러리를 가지고 있으며 3백만 개의 앱에서 사용되고 있고, 당신의 프로젝트를 우아하게 확장시켜 줄 수 있다고 합니다(23년 8월 16일 기준). 코코아팟은 Ruby로 제작되어 있는데, 기본 Ruby는 MacOS에서 제공해..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      [Silver III] 피보나치 - 9711 문제 링크 성능 요약 메모리: 79720 KB, 시간: 988 ms 분류 다이나믹 프로그래밍, 수학 문제 설명 피보나치 수열은 아래와 같이 표현된다. 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 각 숫자는 앞의 두 숫자의 합으로 나타내는 것을 알 수 있다. P와 Q 그리고 n이 주어질 때, P번째 피보나치 숫자를 Q로 나눈 나머지를 구하여라. 입력 첫 번째 라인에는 정수 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 정수 P와 Q가 주어진다. 출력 각 테스트 케이스마다 "Case #x: M" 형식으로 출력한다. x는 테스트 케이스 번호(1부터 시작), M은 P번째 피보나치 숫자를 Q로 나눈 나머지이다. 풀이 i) 첫 시도에서는 P의 최대..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      [Gold V] 비밀번호 만들기 - 17218 문제 링크 성능 요약 메모리: 69100 KB, 시간: 8 ms 분류 다이나믹 프로그래밍, 문자열 문제 설명 최근 들어 개인정보 유출에 대한 뉴스를 많이 본 수형이는 한 사이트의 비밀번호가 유출 되더라도 다른 사이트에서 똑같은 비밀번호로 접속할 수 없도록 사이트마다 비밀번호를 다르게 설정하기로 다짐했다. 많이 고민한 결과 수형이는 눈을 감고 키보드를 막 쳐서 나온 두 문자열에서 공통으로 존재하는 가장 긴 부분 문자열을 비밀번호로 하기로 하였다. 수형이가 눈을 감고 만든 두 문자열이 주어졌을 때 비밀번호를 만드는 프로그램을 만들어보자. 입력 첫째 줄과 둘째 줄에 수형이가 눈을 감고 만든 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 길이는..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      [Silver II] 가장 긴 증가하는 부분 수열 - 11053 문제 링크 성능 요약 메모리: 79516 KB, 시간: 20 ms 분류 다이나믹 프로그래밍 문제 설명 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 풀이 i) 해당 문제는 DP문제로, d..