다이나믹 프로그래밍이란? 다이나믹 프로그래밍, 동적 계획법이라고 불리는 알고리즘은 하나의 커다란 문제를 작은 문제들로 나누어 값을 구하는 방법이다. 점화식을 구하고 나면 쉽게 풀 수 있지만 이런 사고방식에는 연습이 필요하다. 이 문제에서는 1, 2, 3만을 이용해 숫자를 나타낼 때, 그 경우의 수를 구해야 한다. 작은 것부터 차례대로 생각해보자. n = 1 1 1개 n = 2 1+1 2 2개 n = 3 1+1+1 1+2 2+1 3 4개 n = 4 1+1+1+1 1+1+2 1+2+1 1+3 2+1+1 2+2 3+1 7개 n=1일 때는 1, n=2일 때는 2, n=3일 때는 4 그리고 n=4일 때는 7개의 경우의 수가 나온다. 이 때 n=4를 자세히 살펴보자. 1+3이라는 큰 틀을 구할 때, 오른쪽 피연산자..
46. Permutations Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order. Example 1: Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] Example 2: Input: nums = [0,1] Output: [[0,1],[1,0]] Example 3: Input: nums = [1] Output: [[1]] Swift로 순열을 구하는 코드를 찾다가 풀게 된 문제! (Swift에서는 순열, 조합을 일일이 구해야 하기 때문에..한 번 제대로 ..
Chap1. 컴퓨터 구조를 알아야 하는 이유 ❓ 왜 컴퓨터 구조를 알아야 하는가? 1-1. 컴퓨터 구조를 알아야 하는 이유? 문제 상황을 빠르게 진단하고, 문제 해결의 실마리를 찾을 수 있음 → 다양한 문제를 스스로 해결할 줄 아는 개발자로 성장할 수 있다. 성능, 용량, 비용을 고려하여 개발할 수 있음 ex. 서버 컴퓨터를 고를 때, 클라우드 서비스를 이용할 때 1-2. 컴퓨터 구조의 큰 그림 1. 컴퓨터가 이해하는 정보 데이터 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 0과 1로 표현할 수 있음 (명령어를 위해 존재하는 일종의 재료) 명령어 데이터를 움직이고 컴퓨터를 작동시키는 정보 2. 컴퓨터의 네 가지 핵심 부품 중앙처리장치(CPU: Central Processing Un..
View Life Cycle 뷰가 가지는 상태와 상태가 변화하면서 부르는 메서드에 대해 찾아봤다. 뷰의 상태가 변화하면, 뷰 컨트롤러는 자동으로 자기가 가진 메서드를 부르면서 변화에 맞게 반응함! 예를 들어 viewIsAppearing(_:)을 통해 화면에 나타나는 뷰를 준비시킨다든지, viewWillDisappear(_:)로 현재 데이터나 현재 상태를 저장할 수 있다~ 위 이미지들이 뷰 생명주기를 가장 잘 나타낸 것 같은데 각각 상태가 변화할 때마다 불리는 메서드들이 잘 정리되어 있음!! 불리는 메서드들은 사실 말 그대로다. 우리말로 치면 이제곧나타날거임/이제나타남/사라짐 … 등등이 되었겠지..🥹 부럽다 viewDidLoad: 뷰 컨트롤러 클래스가 생성될 때 가장 먼저 실행됨. 딱 한 번 실행되기 때문..
앱의 생명주기 앱의 생명주기란, 앱 각각의 상태를 다섯 가지로 나누어 정의하는 말이라고 할 수 있겠다! 앱 하나를 실행하면, 그 앱을 제외한 나머지 앱들은 화면에 보이지 않는다. 하지만 화면에 보이지 않더라도 실행 중인 앱이 있을 수 있음! 예를 들어, 타이머 앱! 타이머를 켜 놓고 다른 앱을 실행해도 타이머 앱에서의 시간은 멈추지 않고 정해진 시간이 되면 알림을 준다. 다섯 가지 상태 Active: 앱이 실행 중인 상태 (Foreground) Not Running: 앱이 시작되기 전 Inactive: 앱이 화면에서 실행 중이지만, 어떤 신호도 받지 않는 상태 (Foreground) 예를 들어, 전화가 오거나 알람이 울리면 화면 위를 덮을 때 Background: 앱이 화면에 보이지 않지만 코드를 실행하..
주변에 좋아하는 학생이 많도록 자리를 배치하는 문제 문제 자체는 이해가 쉬웠다! 그대로 구현하는 게 시간이 걸릴 뿐...🤯 사실 며칠 전에 풀다가 만 코드가 있었는데, 다시 보니까 무슨 소린지 전혀 모르겠어서 처음부터 다시 짰다 ㅋㅋ 정확하게 뭘 짜야 하는지 주석부터 달고 시작했더니 가닥이 쉽게 잡히는 것 같다 let n = Int(readLine()!)! var seats = Array(repeating: Array(repeating: 0, count: n), count: n) // 전체 좌석 만들기 우선 전체 좌석을 만들고 초기화해주었다 그리고 n * n 만큼 for문을 돌면서 한 줄씩 읽었다 한 명의 번호와 그 학생이 좋아하는 학생 번호들이 나열되기 때문에 한 줄을 읽을 때마다 실행해야할 것들이 많..