전체 글 140

프로그래머스: 단어 변환(DFS + String.Index)

https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   한 번에 한 개의 알파벳만 바꿀 수 있고 target으로 변환하는 가장 짧은 변환 과정을 찾는 문제이기 때문에 DFS로 접근했다.전체적인 풀이 방법은 다음과 같다재귀함수를 이용하여 현재 단어(value)가 target과 같다면 종료한다 → DFS의 깊이가 정답 값words 를 순회하면서 현재 단어(value)와 한 글자만 다른 글자를 찾는다한 글자만 다른 단어를 찾았다면, 해당 단어를 value로 두는 재귀함수를 호출한다. 첫 번째 시도(D..

프로그래머스 - 네트워크(43162)

https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  아이디어네트워크는 최대 n개 컴퓨터간 연결을 확인하고 끊어지면 네트워크 개수 + 11번 컴퓨터 큐에 추가큐에서 하나씩 빼면서 해당 컴퓨터에 연결되어 있는 컴퓨터들을 탐색탐색한 컴퓨터는 visited 처리연결되어 있는 컴퓨터를 큐에 추가제외: 자신, 방문했던 컴퓨터, 연결되지 않은 컴퓨터큐가 비면(연결 되어 있는 컴퓨터를 모두 탐색했다면) 네트워크 + 1방문하지 않은 컴퓨터를 찾아 큐에 추가 (모든 컴퓨터를 방문할 때까지 반복)네트워크 개수 반..

Today I Learn: @escaping 클로저

Swift에서 클로저(Closure)는 기본적으로 함수의 실행이 끝날 때 자동으로 해제되는 특징을 가짐하지만 특정 상황에서는 클로저가 함수가 끝난 후에도 유지되어야 하는 경우가 있음이때 사용하는 것이 @escaping 키워드→ 클로저의 생존 기간을 함수 밖으로 연장하는 것1. @escaping이 필요한 이유기본적으로 Swift의 클로저는 비탈출(Non-Escaping) 방식이다.→ 기본적으로 클로저는 함수가 종료되면 메모리에서 자동으로 해제됨하지만 비동기 작업(Async Task)의 경우 클로저가 함수의 실행이 끝난 후에도 유지되어야 함 예제: 네트워크 요청 (비동기 실행)func fetchData(completion: @escaping (String) -> Void) { DispatchQueue...

Today I Learn 2025.03.14

Today I Learn: UIScrollView + UIStackView를 UITableView로 리팩토링

미니 프로젝트 후, 튜터님께서 피드백 해주신 내용을 바탕으로 리팩토링을 진행했다  상세 피드백참고: 코멘트 중요도P0: 다음 프로젝트에서는 반드시 고쳐졌으면 하는 사항.P1: 현업에서 중요시하는 요소이거나 기타 중요한 이유로 고쳐지기를 권장하는 사항.P2: 개인 취향 혹은 질문 사항. 개인 피드백 P1: 비슷한 데이터의 경우, 하나하나 만들기 보다는 UITableView등을 사용해 표시하면 좋습니다.P2: View의 Layout을 작성할 때 동일한 방법을 사용하면 좋지 않았을까 합니다. 리팩토링 전 와이퍼 프레임 분석프로필 이미지, 이름, 나이, mbti, 깃허브, 블로그 주소, 자기소개까지는 유저 생성 시 필수로 입력 받는 값이다따라서 View 내부에서 직접 뷰와 라벨을 통해 필수 값들을 표시했다팀 응..

카테고리 없음 2025.03.14

2025 프로그래머스 코드챌린지 1차 예선(유연 근무제)

https://school.programmers.co.kr/learn/courses/30/lessons/388351 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 요약자신이 설정한 출근 희망 시간 + 10까지 어플로 출근 희망 시각이 9시 58분이면 10시 8분까지 출근 토, 일은 예외 매일 한 번씩 출근, 모든 시각은 시간에 100을 곱하고 분을 더한 정수로 표현 -> 10시 13분은 1013, 9시 58분은 958 실제로 늦지 않고 출근한 직원이 몇명인지 구하기schedules: 출근 희망 시각을 담은 배열 timelogs: 직원들이 일주일 동안 출근한 시각을 담은 2차원 배열 startday..

Today I Learn: Swift에서의 Copy On Write (COW)

Copy On Write (COW)공유 데이터를 효율적으로 관리하기 위해 프로그래밍에 사용되는 리소스 관리 기술여러 프로그램에서 데이터를 사용할 때 바로 복사하는 것이 아니라, 수정을 시도할 때까지 동일한 데이터를 프로그램 간에 공유함변경사항이 없으면 개인 복사본이 생성되지 않아 리소스가 절약됨복사본은 필요한 경우에만 만들어지므로 수정이 발생할 때 각 프로그램이 자체 버전을 갖게 됨 Swift에서의 COW값 타입을 효율적으로 관리하기 위한 최적화 기법값을 변경하기 전까지는 복사하지 않고, 변경이 발생하면 실제로 복사하는 방식으로 동작함 COW가 적용되는 타입Swift에서는 Array, Dictionary, Set, String 같은 컽렉션 타입은 Copy On Write에 최적화가 적용되어 있음즉, 컬렉..

Today I Learn 2025.03.12

알고리즘 문제(Swift) - 프로그래머스: 여행 경로

https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  첫 번째 시도우선, tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미이므로, 출발지에서 갈 수 있는 모든 도착지를 구분하기 위해 딕셔너리로 정의했다ICN에서 출발하여 갈 수 있는 도착지 중 알파벳 순으로 이동하고, 도착한 곳은 removeFirst() 로 딕셔너리의 value에서 제거하므로써 티켓을 사용 처리했다mapValues : 딕셔너리에서 key는 유지하면서 value만 변환하는 함수방문한 곳은 v..

Today I Learn: Swift에서의 연결 리스트

연결 리스트(Linked List)는 노드(Node)라는 개별 요소들이 연결되어 있는 자료 구조이다 Swift는 기본 라이브러리로 Linked List가 포함되지 않으므로 직접 구현해야 한다 1. 연결 리스트(Linked List)의 기본 개념연결 리스트는 여러 개의 노드로 이루어져 있으며, 각 노드는 데이터와 다음 노드를 가리키는 포인터(참조)를 포함한다단일 연결 리스트(Singly Linked List)각 노드는 데이터와 다음 노드를 가리키는 참조(next)만 포함이중 연결 리스트(Doubly Linked List)각 노드는 데이터, 이전 노드를 가리키는 previous 참조, 다음 노드를 가리키는 next 참조를 포함원형 연결 리스트(Circular Linked List)마지막 노드의 next가 첫..

Today I Learn 2025.03.11