[swift] Tuist 겉핥기
·
swift
Tuist란?Tuist는 Xcode 프로젝트를 코드로 선언하고 자동 생성·관리하는 CLI 도구입니다.대규모 iOS/macOS 프로젝트에서 수작업으로 변경되는 Xcode 설정을 코드로 표준화하여 협업 충돌과 설정 드리프트를 줄이고, 모듈화·의존성 그래프 관리·빌드 파이프라인을 체계화합니다.+) XcodeGen과 다른점: Tuist는 swift로 프로젝트 선언이 가능하지만, XcodeGen은 yaml과 json 기반으로 프로젝트를 선언합니다.Tuist를 사용하는 이유(러닝커브만 보면 소규모 프로젝트에서 사용할 이유가 없어보임)Git을 사용하면서 Xcode 프로젝트 설정(.xcodeproj) 파일의 충돌은 불가피합니다. 이를 개선해줄 수 있는 도구가 바로 Tuist입니다.Tuist를 적용시켜 모듈화를 했을 때..
2025 토스 Next 신입 iOS 개발자 지원 후기
·
회고
2025 토스 Next 신입 개발자(3년차 이하) 공고가 떠서 후다닥 지원을 했습니다. 채용 프로세스는 다음과 같습니다. 디버깅 과제 > 구현 과제 >직무 인터뷰 > 문화적합성 인터뷰 > 레퍼런스 체크 및 처우 협의 > 입사일 조율 및 입사1차 디버깅 과제, 2차 구현 과제로 구성되어 있고, 디버깅 과제는 서류만 넣으면 전부 진행하는 것 같습니다. 결과아쉽(?)지만 탈락하였습니다. 디버깅 과제에 대해 자세히 말할 순 없지만 90%는 해결했습니다. 하지만 해결한 코드가 엉성했을 것으로 추정되며, 일단 전부 해결하지 못한 것이 가장 큰 이유가 아닐까 싶습니다. 일반 구현과제나 코딩테스트가 아닌 새로운 유형의 과제를 경험할 수 있는 좋은 기회였습니다.
네이버 부스트캠프 웹·모바일 10기 베이직&챌린지 후기(+멤버십 합격)
·
회고
들어가기에 앞서 작성자는 작문능력이 그렇게 뛰어나지 않음을 알려드립니다.회고 전 이모저모더보기네이버 부스트캠프에 대한 이야기를 하기 전에, 부트캠프에 대한 저의 생각을 말하고자 합니다.컴퓨터공학과를 전공한 저로서는 부트캠프는 필요치 않다고 생각하여 곧바로 취업 준비를 시작했습니다. 하지만 취준 기간이 길어지고 취업 시장 한파(매년 그랬음)로 인해 '이 기간동안 기록에 남는 무언가라도 해야겠다!'라는 마음으로 다른 기업에서 진행하는 국비지원 부트캠프에 지원해서 참여를 했습니다. 하지만 제 기대가 컸던 탓인지... 국비지원 부트캠프의 교육 커리큘럼은 모두가 수료 가능하게 비전공자 기준으로 계획되어 있었고, 고등학교 수업마냥 매시간 강의를 진행했습니다. 제가 참여했던 목적은 개발자를 준비하는 참여자들끼리의 지..
BOJ 2142 정돈된 배열 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/2142 문제 해설처음 문제를 풀 땐 제한조건을 보지 않고 브루트포스로 작성을 했다가 시간초과를 맞았습니다.시간초과 문제를 해결하기 위해선 코드를 최적화할 필요가 있었습니다.해당 문제는 이미 정돈된 배열을 사용하는 것이기에 인접 배열이 조건을 충족하는지만 확인하면 됐습니다.정돈 조건 : A[i][j] + A[k][l] 코드더보기import Foundationfinal class FileIO { private let buffer:[UInt8] private var index: Int = 0 init(fileHandle: FileHandle = FileHandle.standardInput) { buffer..
BOJ 1222 홍준 프로그래밍 대회 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1222 문제 해설이 문제는 에라토스테네스의 체 방식을 활용한 최적화 문제입니다.팀원 수를 T라고 하면, 각 학교의 학생 수가 T로 나누어떨어져야 합니다.즉, T는 참가하는 학교들의 학생 수의 공약수여야 합니다.본선 참가자 수 = T * (참가 학교 수)를 최대화해야 합니다.최소 2개 학교가 참가해야 하므로, 각 팀원 수에 대해 참가 가능한 학교가 2개 이상인지 확인합니다.코드더보기import Foundationfinal class FileIO { private let buffer:[UInt8] private var index: Int = 0 init(fileHandle: FileHandle = FileHandle.s..
BOJ 3190 뱀 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/3190 문제 해설정말 단순하게 구현문제입니다. 다른 언어면 아마 Deque를 구현해서 사용했어야 문제를 풀 수 있을겁니다.뱀 문제를 풀 때 주의해야할 점은 뱀의 시작위치는 (1, 1)이라는 것입니다.일반 배열처럼 (0, 0)에서 시작하면 틀리기 때문에 주의하시길 바랍니다. 코드더보기import Foundationlet n = Int(readLine()!)!let k = Int(readLine()!)!var apples = [(Int, Int)]()for _ in 0..
BOJ 2449 전구 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/2449 문제 해설N개의 전구가 일렬로 배치되어 있고, 각 전구는 1부터 K까지의 색으로 표현됩니다. 한 번에 연속된 같은 색의 전구 그룹을 선택해 다른 색으로 변경할 수 있을 때, 모든 전구를 같은 색으로 만드는 최소 변경 횟수를 구하는 문제입니다.연속된 같은 색 전구를 하나의 그룹으로 압축합니다.dp[i][j]를 i번째 그룹부터 j번째 그룹까지 같은 색으로 만드는 최소 횟수로 정의합니다.점화식 : dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (colors[i] != colors[k + 1] ? 1 : 0) 코드더보기import Foundationlet input = readLine()..
BOJ 1799 비숍
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1799 문제 해설체스판 위에 비숍을 겹치지 않게 놓는 문제입니다.마음같아선 브루트 포스로 전부 찾아보고 싶지만 시간초과가 나기 때문에 효율적인 방법을 찾아야합니다.먼저, 비숍을 놓을 수 있는 칸을 흑과 백으로 나눕니다.(비숍은 대각선으로만 움직이기 때문에 서로 다른 색의 칸에는 영향을 못 줍니다.)비숍을 놓을 수 있는 위치를 흑백으로 나눴다면 백트래킹을 통해 가능한 비숍의 최대 개수를 각각 구합니다.(대각선은 i + j와 i - j + (N - 1)음수방지 로 2차원 배열이 아닌 1차원 배열로 구현 가능합니다.) 코드더보기import Foundationif let n = Int(readLine()!) { var board = ..
BOJ 1865 웜홀 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1865 문제 해설해당 문제는 양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 음수 사이클이 발생하는 지에 대해 알아보는 문제입니다.양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 edges에 추가합니다.벨만-포드 알고리즘을 사용하기 위해 거리 배열을 초기화 시킵니다.(이때 거리는 무한입니다.)시작점에서 모든 간선을 N-1번 반복하여 최단거리를 갱신합니다.갱신이 완료되고, 한번 더 실행시켰을 때 갱신이 발생하면 음수 사이클이 존재하는 것입니다. 코드더보기import Foundationif let tc = Int(readLine()!) { for _ in 0.. distance[x] + dist { ..
BOJ 1918 후위 표기식 swift
·
알고리즘
문제 링크 : https://www.acmicpc.net/problem/1918 문제 해설중위 표기식을 후위 표기식으로 변경하는 문제입니다.중위 표기식을 후위 표기식으로 변경하는 절차를 조건문으로 작성하는 것이 정답입니다.피연산자는 바로 출력합니다.(코드에서는 String var에 추가하였습니다.)연산자는 스택에 push합니다.("+", "-", "*", "/" 등)여는 괄호는 무조건 push합니다. "("닫는 괄호가 나오면 여는 괄호를 만날 때까지 스택에서 pop합니다.(주의: "(" 여는 괄호도 제거해야 합니다.)수식이 끝나면 스택에 남은 연산자를 pop합니다. 코드더보기import Foundationlet input = readLine()!.map{ String($0) }var result = ..