분류 전체보기 56

[프로그래머스] 가장 먼 노드 with Swift

연습문제 가장 먼 노드 Level 3 문제 n개의 노드가 있는 그래프 1번 노드에서 가장 멀리 떨어진 노드의 개수 구하기 가장 멀리 떨어진 노드란 최단 경로로 이동했을 때, 간선의 개수가 가장 많은 노드들을 의미 n은 2이상 20,000이하 간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있음 간선 정보는 [a, b] 배열로 제공되는데, 이는 a번 노드와 b번 노드 사이에 간선이 있다는 의미 Idea Dijkstra 연결된 간선의 개수에 따라 최단 경로가 결정되므로 모든 가중치는 1로 가정하여 각 노드의 비용을 구하면 됨 Code Swift 다익스트라 알고리즘으로 구현 ► 다익스트라 알고리즘 with Swift 다익스트라 알고리즘 with Swift 알고리즘 문제를 풀다가 최단 경로에 관한 ..

[프로그래머스] 배달 with Swift

Summer/Winter Coding(~2018) 배달 Level 2 문제 N 개의 마을로 이루어짐 각 마을은 양방향 통행 가능한 도로로 연결되어 있고 각 도로 별로 걸리는 시간이 다름 1번 마을에서 배달 하려고 하는데 K 시간 이하로 배달이 가능한 마을만 주문을 받음 N은 1이상 50이하 road 길이(도로 정보 개수)는 1이상 2,000이하 road 는 길이가 3인 배열 (a, b, c) a, b (1이상 N이하, a != b) : 마을 번호, c (1이상 10,000이하 자연수) : 걸리는 시간 a, b를 연결하는 도로는 여러 개가 있을 수 있음 K 는 음식 배달이 가능한 시간. 1이상 500,000이하 1번 마을에 있는 음식점이 K 이하의 시간에 배달이 가능한 마을의 개수를 반환 Idea 주어진 ..

다익스트라 알고리즘 with Swift

알고리즘 문제를 풀다가 최단 경로에 관한 문제를 풀게 되었는데, 알고리즘에 대한 정확한 개념을 공부한 지 너무 오래된 것 같아 다시 공부해보았다! 최단 경로에 대한 알고리즘은 여러 가지가 있지만 이번엔 '다익스트라' 알고리즘에 대해 정리해보고자 한다. 다익스트라 알고리즘에 대해 설명하기 전 최단 경로에 대한 설명을 간단히 해보자면, 최단경로 란? - 유향 가중치 그래프를 가정 - 경로란, 한 정점에서 다른 정점까지의 길을 의미 - 경로의 길이란, 경로를 구성하는 간선들의 가중치 합을 의미 - 최단 경로란, 시작정점 → 도착정점의 경로들 중 길이가 가장 작은 경로를 의미 이때, 최단 경로에 대한 것은 또 다음과 같이 구분할 수 있다. - 단일 시작점 최단 경로 : 시작점 1개 → 모든 도착지 1. 가중치 ..

# Algorithm 2022.06.23

LowerBound & UpperBound

최근에는 이분 탐색을 많이 쓰지 않았다가 얼마 전 카카오 문제 중 순위 검색의 효율성을 해결하기 위해 다시 찾아봤다. 전에 C++ 로 알고리즘 짤 때는 algorithm 라이브러리에 lowerbound 함수가 있어서 그걸 사용했었는데 이젠 필요하면 직접 구현해야하니까 이 참에 개념을 확실히 정리해두는게 좋을 것 같다는 생각이 들었다. 이런게 또 정확히 기억 안나면 사소한 부분 때문에 헷갈린다,, 참고. Lower bound basics LowerBound 찾고자 하는 값 이상이 처음 나오는 위치(인덱스)를 찾는 알고리즘이다. func lowerBound(_ sortedArr: [Int], _ target: Int) -> Int { var start = 0 var end = scores.count whil..

# Algorithm 2022.03.18

[카카오] 순위 검색

2021 KAKAO BLIND RECRUITMENT 순위 검색 Level 2 문제 각 항목에 대해 하나 씩 선택해야 함 개발 언어 항목 cpp, java, python 지원 직군 항목 backend, frontend 지원 경력구분 항목 junior, senior 선호 소울 푸드 chicken, pizza 지원자 정보 info → 배열 크기는 1 이상 50,000 이하 → “개발언어 직군 경력 소울푸드 점수” 형식 → 이 때 점수는 1 이상 100,000 이하 → 스페이스 하나로 구분 [“java backend junior pizza 150”, ”python frontend senior chicken 210”] 요구 사항 query → 배열 크기는 1 이상 100,000 이하 → “개발언어 and 직군 a..

[카카오] 신고 결과 받기

2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 Level 1 문제 신고 횟수에 제한 없이 다른 유저를 계속 신고할 수 있음 한 유저에 대해서도 여러 번 신고가 가능하나, 동일 유저에 대한 신고 횟수는 1회로 처리됨 k번 이상 신고된 유저는 이용이 정지됨 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 보냄 각 유저 별로 메일을 받은 횟수 반환하기 id 개수 : 2이상 1,000 이하. 중복 없음 report 개수 : 1이상 200,000 이하. 이용자_id 신고한_id 형태의 문자열 k : 1이상 200 이하 Idea 각 유저 별로 신고한 id 목록 구하기 각 유저 별로 신고 받은 횟수 구하기 각 유저 별로 신고한 id 가 k 이상인지 확인하여 메일 받은 횟수 구하기 Code ..

[카카오] 튜플

2019 KAKAO 겨울 인턴십 튜플 Level 2 문제 튜플은 중복된 원소가 있을 수 있으나, 순서가 다르면 서로 다른 튜플이다 이 때, 중복 값이 없는 튜플 (a1, a2, a3, …, an) 이 주어질 때, 이 것은 다음과 같이 표현될 수 있다 → {{a1}, {a1,a2}, {a1,a2,a3}, ..., {a1,a2,a3,...,an}} 예로. 튜플이 (2, 1, 3, 4) 이면 다음과 같이 표현될 수 있다. 집합은 순서가 없으므로 집합 내 순서가 바뀔 수 있다. → {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}} → {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}} → {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}} 특정 튜플을 표현..

[Clean Code] 10장. 클래스

📖 해당 글은 Clean Code(클린 코드) 책을 읽고 정리한 글입니다. 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면, 가장 먼저 변수 목록이 나온다. 정적 공개(static public) 상수 → 정적 비공개(static private) 변수 → 비공개 인스턴스 변수 공개 변수가 필요한 경우는 거의 없다. 변수 목록 다음에는 공개 함수가 나온다. 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려가며 작성된다. 캡슐화 변수나 유틸리티 함수는 가능한 공개하지 않는 것이 좋지만 때로는 protected 로 선언해서 테스트 코드에 접근을 허용하기도 한다. 하지만 캡슐화를 풀어주기 전에 가능한 비공개 상태를 유지할 방법을 찾아봐야 한다. 클래스는 작아야 한..

[Alarm] #+5. 알람 레이블 화면 기능 완성 및 알람 목록 정렬 버그 수정

개발 일자 : 2022. 3. 7 최근 기능 정의서를 좀 더 디테일하게 작성하다 보니 다 되었다고 생각됐던 알람 레이블 설정 화면에서 동작하지 않는 기능이 있었다. (기능 정의의 중요성을 깨닫는 순간,,,) 레이블에 텍스트를 입력하지 않고 넘기면 아무 텍스트도 넘어가지 않는 것이었다. 기존에 텍스트 필드의 text 가 nil 일 때 처리를 해두어서 그거면 되는건줄 알았다. 코드가 좀 마음에 안들긴 하는데 우선은 더 좋은 방법이 떠오르지 않아서… 전에는 viewWillAppear 함수에 처리해야하는 코드를 작성해두었었는데 키보드에서 완료 버튼을 누를 때도 동일한 코드가 동작해야했기 때문에 따로 함수로 분리하였다. private func saveAlarmLabel() { var labelText = labe..

[Clean Code] 9장. 단위 테스트

📖 해당 글은 Clean Code(클린 코드) 책을 읽고 정리한 글입니다. TDD. Test Driven Development 우리는 단순히 테스트 코드를 추가하기 위해 제대로 된 테스트 케이스를 작성해야 한다는 중요한 사실을 놓쳐서는 안 된다. TDD 법칙 세 가지 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이 규칙을 따르면 개발과 테스트가 30초 주기로 묶인다고 한다. 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다는 것. 즉 테스트 코드 작성하고 실제 코드 작성하고 이런식으로 개발을 해야한다는 것이다. 사실 위의 세..