전체 글148 [Swift] 프로그래머스 - 하노이의 탑 프로그래머스 링크 : https://programmers.co.kr/learn/courses/30/lessons/12946?language=swift 코딩테스트 연습 - 하노이의 탑 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대 programmers.co.kr 코드 import Foundation func solution(_ n:Int) -> [[Int]] { var result = [[Int]]() func hanoi(_ n: Int, _ start: Int, _ end: Int, _ mid: Int) { if n == 1 { result.app.. 2022. 1. 10. 맥북 개발환경 세팅 1. 기초 세팅 - Xcode : https://apps.apple.com/kr/app/xcode/id497799835?mt=12 - Homebrew $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ echo 'export PATH=/opt/homebrew/bin:$PATH' >> ~/.zshrc $ source ~/.zshrc - Oh my zsh $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" $ vi ~/.zshrc ZSH_THEME=.. 2021. 12. 25. GCD에서 의도치 않은 교착상태를 피하는 법 print("hi \(Thread.current)") // 1 DispatchQueue.global().sync { print("hi \(Thread.current)") // 2 } DispatchQueue.global().async { print("hi \(Thread.current)") // 3 } // 1 - hi {number = 1, name = main} // 2 - hi {number = 1, name = main} // 3 - hi {number = 4, name = (null)} 1번 부분을 보면 메인 스레드에서 실행되고 있음을 알 수 있습니다. 원래 특별한 설정 없는 모든 코드는 메인스레드 위에서 돌아갑니다. 그럼 2번 부분은 왜 메인 스레드에서 처리될까요? 논리적으로는 메인 스레드를 .. 2021. 12. 22. DispatchQueue 교착상태 Deadlock(교착상태)는 깜직하게도 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)라는 오류를 만들어 앱을 터트립니다. 교착상태를 막아야겠죠? 이런 교착상태가 일어나는 상황을 직렬 큐일 때, 동시 큐일 때로 나누어보면, 1. Serial(직렬) Queue - async 속 sync DispatchQueue.main.async { // main queue == serial DispatchQueue.main.sync { // 교착상황!! } } 해결법 : 다른 큐에서 async로 사용하세요. sync로 하면 교착상태가 또 나니까 주의하세유 -> 참조 : https://gogo-ios.tistory.com/46 DispatchQueue.global().as.. 2021. 12. 22. DispatchQueue 종류 세 가지 1. Main Queue 2. Global Queue 3. Custom Queue * 디스패치큐는 큐의 특성에 맞게 큐가 알아서 스레드에 자기 task를 분배합니다. 프로그래머는 그저 task를 큐에 넣어주면 됩니다. 1. Main Queue - Serial(직렬) 큐 - 딱 한 개의 큐 - 스레드는 메인스레드 딱 한 개만! (UI 업데이트 처리) 메인 큐는 스레드가 하나밖에 없기 때문에 Serial Queue가 되는 것이 당연합니다. +) 코드를 작성할 때에 별도의 처리를 하지 않는 이상 모든 일들은 메인 스레드가 작업하게 됩니다. 2. Global Queue - Concurrent(동시) 큐 - QoS(Quality of Service)에 따라 6종류로 나뉨 QoS는 작업의 중요도를 결정합니다. 소요.. 2021. 12. 21. 동기/비동기, 직렬/동시 1. 동기 vs 비동기 안녕하세요◠‿◠ 고고입니다. 카페를 예로 들자면 동기 - 앞의 사람이 주문을 해서 음료(결과)를 받을 때까지 뒤의 사람들은 모두 다 대기합니다. 비동기 - 앞의 사람이 주문을 하고 진동벨을 받아가고, 뒤의 사람은 주문을 한다. 진동벨이 울리면 음료를 받아가면 됩니다. 요약하면 동기 - 요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식 비동기 - 요청을 보낸 후 응답(=결과)와는 상관없이 다음 동작이 이루어지는 방식 동기(sync) 장점 - 설계가 간단하고 직관적 단점 - 결과가 주어질 때까지 아무것도 하지 못하고 대기해야 함 비동기(Async) 장점 - 아래 예제처럼 서버로부터 데이터를 가져오는 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있.. 2021. 12. 21. 이전 1 ··· 15 16 17 18 19 20 21 ··· 25 다음