목록전체 글 (23)
cchanmi
안녕하세요. 이번에 Moya를 이용해 test code를 작성하게 되어서 블로그에 기록하려고 해요. 생각보다 레퍼런스가 많지는 않았어서 구현하는 데까지 시간이 꽤 걸렸던 것 같네요. 덕분에 Moya가 test code 작성할 때의 편리함을 제공해 준다는 사실을 알게 되었던 것 같네요. :) 제가 이번에 테스트 하고 싶었던 부분은 네트워크 통신이 일어나는 Service 파일과, ViewModel 테스트였습니다. 먼저 Service 파일 test부터 시작해 보겠습니다. 먼저 우리가 네트워크 test code를 작성해서 얻으려는 목적이 무엇인지 생각해 보겠습니다. 1. 응답으로 온 Json이 원하는 model 잘 decode 되는지 2. network 실패시 상황에 맞는 에러 핸들링이 잘되는지 와 같은 것들을..
안녕하세요.제가 작년부터 배포를 시작해서 운영하고 있는 서비스가 있는데, 앱에서 에러가 발생했을 때의 에러 핸들링이 잘되어 있지 않아서 QA 때마다 에러가 발생하면 그 원인을 찾기 위해 애를 먹었던 기억들이 종종 있었습니다... 최근, 팀원들과 서비스 업데이트 방향을 재정비하면서 에러가 발생했을 때, 유연한 대처가 되지 못하고 앱이 불친절하게 멈춰 버리는 현상을 유저에게 노출시켜서는 안된다는 의견이 나왔습니다.의논 끝에 세 가지 에러 상황을 정의해 놓고, 해당 에러가 발생한다면 기존처럼 앱이 묵묵부답으로 멈춰 버리는 것이 아니라, 토스트 메시지를 띄어 주어서 상황을 알리고, 재시도를 요청하는 방향으로 기능을 추가하게 되었습니다. 그렇게 저희 서비스에서 정의 내린 에러 상황 세 가지는 다음과 같습니다. -..
Dictionary는 key와 value로 이뤄진 자료구조입니다. key를 이용해 value를 찾을 수 있는데, 그 반대인 value를 이용해 key를 찾는 방법도 있을까요? let input = readLine()!.split(separator: " ").map{Int(String($0))!} let number = input[0] let cutLine = input[1] var dic = [Int:String]() // 딕셔너리에 값 추가 for i in 1...number { dic[i, default: ""] += readLine()! } 이 코드는 백준 문제인데요. 제가 조금 바꿔 보았습니다. ㅎㅎ 현재 이 코드의 dictionary는 1번부터 시작하는 숫자로 key를 가지고 value로는 포켓..
Dictionary와 Set은 내부적으로 hashTable로 구성되어 있기 때문에, 순서가 보장되지 않죠. 가끔 Dictionary와 Set으로 값을 찾으면 딱 좋은 상황인데, 값이 들어온 순서대로 출력해야 하는 상황을 겪는다면 어떻게 해야 할까요? 그럴 때마다 항상 Dictionary와 Set을 포기했었는데, 이번에 원하는대로 출력할 수 있는 로직을 구현해 보게 되어서 기록해 두려고 합니다. ㅎㅎ 해당 함수는 입출력으로 [1, 2, 3, 3, 3, 3, 4, 4]라는 배열을 주고 있습니다. 여기서 중복되는 배열의 값일 경우, 그 중복값을 count 하여 출력해 주고자 합니다. 단, 먼저 나온 순서대로 출력하고자 합니다. 예를 들면 위의 입출력에서는 Dicrionary를 이용한 로직 func soluti..
안녕하세요. 오늘은 가장 긴 팰린드롬 문제에 대해서 기록해 보려고 해요. 난이도는 level 3입니다. https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음에 문제를 잘못 이해하기도 했고... 반례를 아예 생각하지 못한 코드를 작성하기도 했고... 이것저것 찾아보면서 고민해 보다가 2시간 만에 겨우 풀었네요 ㅠ 2시간 동안의 삽질과 의문들, 왜 그 코드는 틀렸었고, 수정한 코드는 맞았는지에 대해 적어두려고 해요. 먼저 저는 DP로 접근했습니다...
https://www.acmicpc.net/problem/16988 16988번: Baaaaaaaaaduk2 (Easy) 서기 2116년, 인간은 더 이상 AI의 상대가 되지 못하게 되었다. 근력, 순발력, 창의력, 사고력, 문제해결능력, 심지어 인간미조차 AI가 인간을 앞선다. AI가 온 지구를 관리하며 이미 인류는 지구의 www.acmicpc.net 골드 3 문제입니다. 나의 바둑돌을 2개씩 두는 모든 경우의 수를 다 검증해 보고(브루트 포스), 나의 바둑돌이 2개일 때, bfs 함수를 실행시켜서 나온 값들을 더한 뒤 최대값을 찾는 방법으로 접근했습니다. 스위프트로 푸시는 분들에게 도움이 되기를 바라며! let input = readLine()!.split(separator: " ").map{Int(..
일주일 동안 못 풀었던 문제를 일주일 만에 드디어!!! 풀었기 때문에 기록해 보려고 합니다! 🧡 문제는 https://www.acmicpc.net/problem/5427 5427번: 불 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에 www.acmicpc.net 백준 5427번의 불 문제이며, 티어는 골드 4입니다. 저는 일단 testCase를 입력 받고, testCase만큼 for문을 돌려 주는 코드로 시작하였습니다. 여러 testCase가 반복되기 때문에 그래프의 초기화를 잘해 주어야 하는데요. 저는 매번 초기화해 주는 작업에서 실수를 할까 봐, testCase..
2019 KAKAO BLIND RECUITMENT 문제이며, 난이도는 레벨 1입니다. 풀다가 시간 초과가 발생하게 되어서, 이중 for문 코드와, for문 안에 고차함수, 단일 for문 코드들을 모두 작성해 보았으며, 각각의 코드들의 시간을 측정해 보았습니다. https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이중 for문 코드 import Foundation func solution(_ N:Int, _ stages:[Int]) -> [Int] ..
안녕하세요. :) Swift 언어에서 문자열에 index에 접근하는 것이 까다로워서 두 번째 글을 작성하게 되었어요. 저번 글들에서 다루지 않았던 것들 위주로 다뤄볼 테니, 저번 글을 읽고 오면 더 좋을 것 같습니다! 1. prefix prefix는 문자열의 앞에서부터 접근합니다. let string = "hello, swift" let str1 = string.hasPrefix("h") // true 차례대로 하나씩 봐보겠습니다. hasPrefix는 파라미터로 들어간 값으로 시작하는지, 아닌지를 판단해 주는 메서드입니다. return 타입이 bool 타입이네요. let str2 = string.prefix(5) // hello prefix는 n만큼 문자열의 index를 접근해 주는 메서드입니다. let..
인생 첫 골드 문제,,, 이틀 걸려 고민하면서 풀었다. 내 코드가 다른 분들에게 참고가 되기를,,, https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 문제 풀면서 고려했던 점은 연산자로는 +, -, *, /, (, )와 알파벳들이 입력으로 주어진다. 1. ( 열린 괄호가 들어왔을 때에는 일단 stack에 추가 2. ) 닫힌 괄호가 들어왔을 경우네는 ( 열린 괄호를 만나기 전까지 stack의 값을 빼면서 result 배열에 삽입한다 2-a wh..