개발
-
-
Class / Struct 은 뭐가 다를까개발/Swift 2022. 2. 13. 16:40
Class 와 Struct는 어떤 차이점들이 있을까? 나는 언제 어느 상황에서 Class Struct를 알맞게 골라 써야할까? Struct도 class 처럼 프로퍼티를 가질수있으며 메소드를 구현할수있다. 내부 프로퍼티 수정도 가능하다 ( mutating 함수를 쓰면된다. ) Extends도 사용할수있다. 대표적인 차이점은 값타입vs 참조 타입이다. Class는 참조타입 Struct,Enum은 값타입이다. 참조타입의 경우 같은 객체를 두 변수에 담은경우 한변수를 변경시킬때 둘다 변경된다는 특징이 있다. 또 Struct 에서는 상속이 불가능 하다는 특징이있다. view와 관련된것들은 UIViewController UIView 등등 을 상속받아야 하므로 제외하고 다른 부분에서 구현하려는게 굳이 상속이 필요없다..
-
[Swift] 조이스틱 코딩테스트 프로그래머스개발/Swift 2022. 2. 13. 14:12
문자 변환 카운팅을 위해서 아스키 코드를 활용한다. 위의 아스크코드 표를 참고하면 하늘색부분을 보면 된다. A는 65 → Z 는 90이다. 조이스틱을 위로 / 아래로 변경해서 원하는 문자를 찾을건데 위로가는 방법 , 아래로 가는 방법 두개를 비교해 최솟값을 구하면된다. 찾으려는 문자의 아스키코드 번호를 알아낸 다음 위로가는 방법은 = 아스키코드번호 - 65 (ex>A 인경우 0) 아래는 = 91 - 아스키코드번호 이렇게 계산하면 쉽다. (Z인경우 1) for i in range{ if name[i] != "A"{ let up = name[i].asciiValue! - 65 let down = 91 - name[i].asciiValue! changeCount += Int(min(up, down)) } } ..
-
[Swift] 섬 연결하기 프로그래머스 코딩테스트개발/Swift 2022. 2. 9. 15:36
방법을 찾지못해 검색중 크루스칼 알고리즘을 알게되었다. 아래 링크에 자세하고 쉽게 설명되어있다. https://fomaios.tistory.com/entry/프로그래머스-섬-연결하기-Swift 해당 알고리즘을 모르면 아래 해설도 이해가 어려울것이다. 해결 방법 우선 크루스칼 알고리즘을 토대로 주어진 예시를 그림으로 그려보자면 이렇게 두개의 사이클을 만들어 버리게 된다. 이 두개의 사이클을 피해야 한다. 크루스칼 알고리즘 대로라면 우선 처리 순서를 연결 값이 낮은 순서 0-1 1-3 0-2 1-2 (여기서 사이클 현상이 나므로 제외) 2-3 (여기서 사이클 현상이 나므로 제외) 이 순서 대로 진행해야하고 사이클 현상 제외를 위해 0-1의 부모는 nil → 0 (0:[0,1]) 1-3의 부모는 3은 부모가 ..
-
-
[Swift] 카펫 프로그래머스 코딩테스트개발/Swift 2022. 1. 28. 15:43
염두 해야할것은 다음과 같다. 갈색,노란색의 합은 총 카펫의 격자수와 같다. 가로의 갯수 x 세로의 갯수를 y라고 두면 노란색 격자의 갯수는 x갯수에서 두개를 뺀값 y갯수에서 두개를 뺀 값과 같다. 두가지 조건을 충족하면 해당 문제의 답을 찾을수있다. 첫번째로 총 합을 구한후에 어떤수로 나누어 떨어지는지를 확인하면 사각형형태가 완성된다. 예로 총합이 20이라면 2,4,5,10 로 나누어 떨어진다. 나누어 떨어진 2,4,5,10 은 y의 갯수 , 총합을 y로 나눈값은 x의 갯수가 된다. ex> 10,5,4,2 가로가 세로보다 더 길거나 같기 때문에 y가 작은 순부터 시작해서 먼저 발견되면 리턴하는식으로 구현하면 될것이다. 그리고 y가 2이하인 경우는 노란색이 나올수없으므로 패스하자. let sum = br..
-
[Swift] 소수 찾기 코딩테스트 프로그래머스개발/Swift 2022. 1. 25. 19:02
재귀함수 DFS 에 익숙하지 않아서 문제를 해결하는는데 오래 걸렸다 해당 문제는 DFS를 사용해 만들수 있는 모든 경우의 수를 만들고 해당 수가 소수인지 체크후 배열에 넣으면 되는 문제이다. 중요한것은 DFS를 사용해 경우의 수를 만드는 일이었기 떄문에 소수를 분별 하는것은 짧게 설명한다. 소수 소수는 1말고 약수가 없는수다. 11 이나 13이런건 1말고 나누어 떨어지는 수가없다. 이런거는 해당 수의 제곱근이 그보다 적은 숫자로 나누어 떨어지는지 아닌지 체크하면 된다. for i in 2...숫자의 제곱근+1{ if(num % i == 0){ return false } } 나누어 떨어지면 소수가 아니므로 패스하면된다. 여기서 1은 소수가 아니고 2는 체크할것없이 소수가 맞으니 패스한다. func isPr..