분류 전체보기 192

iOS 프로젝트/계산하지마!/UPDATE

iOS / Version : 4.0 / Date : 2021/02/01 이번 업데이트는 지난 9월달 3.3 버전에 이후로 4개월만의 큰 업데이트 였습니다. 거의 전반적으로 모든점이 수정되었습니다. [앱스토어 링크] apps.apple.com/kr/app/계산하지마!/id1505566774 ‎계산하지마! ‎계산하지마! 하나로 해결하세요! - 계산하지마! 지원하는 계산기능 리스트(Ver3.3.0) 1. [이건 그냥 일반 계산기] - 일반 계산기 2. [내가 얼마 보내주면 돼?] #카카오톡 공유 - 더치페이와 1/N계산을 apps.apple.com 1. 코드 정리 기존의 코드는 정말 처음으로 iOS 어플을 제작해본 프로젝트이기도 하고 구현에 급급하다보니 정리가 하나도 안되어 있었습니다. 앞으로 새로운 기능을 ..

iOS 프로젝트/계산하지마!/정리글

TiTi에 이어 두번째 개인프로젝트 어플인 "계산하지마!" 어플을 정리해보겠습니다. [앱스토어 링크] apps.apple.com/kr/app/계산하지마!/id1505566774 ‎계산하지마! ‎계산하지마! 하나로 해결하세요! - 계산하지마! 지원하는 계산기능 리스트(Ver3.3.0) 1. [이건 그냥 일반 계산기] - 일반 계산기 2. [내가 얼마 보내주면 돼?] #카카오톡 공유 - 더치페이와 1/N계산을 apps.apple.com 1. 앱스토어 등록 사진 2. 만들게 된 계기 저는 돈계산이 안됩니다! 19년도 겨울에 친구와 여행을 다니곤 했는데 둘이서 각자 쓴 돈이 달라가지고 나중에 더치페이처럼 정산을 하려고 하니 머리가 복잡해지고 괜히 돈이 안맞는 것 같고... 그래서 정산을 해주는 어플을 찾아보았습..

iOS 프로젝트/TiTi-공부를 위한 타이머/iOS UPDATE

iOS / Version : 3.3 / Date: 2021/01/21 RESET 버튼을 제거하고, SETTING 버튼으로 자리를 이동시켰습니다. 그리고서 남은 자리에 TIMER 버튼을 새로 넣었습니다. 누적시간을 유지하며 타이머 시간만 능동적으로 수정이 가능하겠금 화면을 추가로 제작하였습니다. 1. 타이머 설정화면 추가 override func viewDidLoad() { super.viewDidLoad() hideKeyboard() second = UserDefaults.standard.value(forKey: "second") as? Int ?? 2400 Label_timer.text = printTime(temp: second) Text_H.keyboardType = .numberPad Text_M..

iOS/앱스토어 심사를 통과하지 못함, 재 업데이트

지금까지 취미로 1년동안 많은 업데이트 제출을 해봤었는데 애플에게 업데이트 거절당한것은 처음이었다. 심사를 통과하지 못함 처음엔 좀 당혹스러웠지만 일단 먼저 많은양의 영어가... 그래서 가장먼저 구글 번역기 창을 띄워서 내용을 확인하였다 ㅋㅋㅋㅋ 알려준대로 링크를 클릭하니 내 어플로 이동됐다. 위의 "1개의 해결되지 않은 macOS 문제"를 클릭하였다. 그랬더니 또다른 영어... 근데 알고보니 macOS 11.1에서 스크린샷처럼 화면이 잘려진 현상이었다. 스크린샷 첨부가 없었으면 이해가 안됐을텐데 생각보다 친절하게 알려주었다! 그래서 바로 업데이트를 진행한 다음 실행시켜 보았다. 동일하게 화면이 잘려진 모습이 보였다! 그래서 고민을 좀 하다가 이것저것 설정을 해보았다. 그중에 화면 크기를 설정하는것처럼 ..

iOS 스터디 정리/1주차 : Xcode란?

2020년 여름방학때 대학교 동아리에서 iOS 스터디 팀장을 맡아 6주간 진행을 했었습니다. 그때 진행했던 내용을 정리하여 글을 올리겠습니다. 1주차 가장 먼저 안드로이드 어플제작 경험이 있는 저로서 Android Studio 와 Xcode의 차이점부터 먼저 알게되면 Xcode가 어떤 프로그램이구나 이점을 먼저 숙지 시키고 싶었습니다. 아무래도 주인공은 나중에 등장해야겠죠? 먼저 Android Studio 부터 개인적으로 느낀 장단점에 대해 설명했습니다. 제가느낀 Android Studio는 코드 복붙이 가능하여 UI 수정이 편하나 이쁘게 제작이 힘들다 import 의 버전이 중요하다는 점이였습니다. 또한 Xcode를 경험해본 바로, 안드로이드가 지원하는 기본 기능이 Xcode보다는 제한적인 느낌이 있었..

iOS 프로젝트/TiTi-공부를 위한 타이머/MAC UPDATE

MAC / Version : 3.2 / Date : 2021/01/14 오늘은 간단하게 마이너 업데이트를 진행했습니다. 1. 타이머 시작시 종료예정시간 갱신 기존에 종료예정시간이 갱신되는 조건은 1. 타이머 설정시, 2. 타이머 정지시 였습니다. 하지만 사용하다 보니 타이머 시간을 설정해 둔 다음 시작을 조금 있다가 할 경우 종료시간이 맞지 않는 현상이 있었습니다. 종료시간을 갱신하기 위해 정지 후 다시 시작하면 평균 지속시간도 깎이기 때문에ㅠㅠ 바로 개선을 진행했습니다! Label_toTime.text = getFutureTime() 기존에 종료예정 시간을 구하는 함수인 getFutureTime() 함수를 시작 버튼 클릭시에도 동작되도록 한문장만 추가하여 간단하게 해결 되었습니다! 2. 시간 설정 입력..

iOS 프로젝트/TiTi-공부를 위한 타이머/정리글

ios 개발자로 진로로 정했습니다! 그래서 이제 1년이 넘도록 취미생활로 만들어 보았던 개인 프로젝트에 대해 정리를 먼저 시작해보겠습니다. [앱스토어 링크] https://apps.apple.com/kr/app/titi-공부를-위한-타이머/id1519159240 ‎TiTi - 공부를 위한 타이머 ‎간편하게 시작, 종료 버튼으로 하루 공부시간을 측정! 얼마나 열심히 공부했는지 알려주는 빡공률! 일주일간의 공부기록을 통해 새로운 목표를 만들어보세요! — TiTi만의 특징 — - 지나간 시 apps.apple.com 1. 앱스토어 등록 사진 2. 만들게 된 계기 중간고사때 공부하는데 뭔가 그냥 공부하면 집중이 잘 안되어 타이머 어플을 찾아보았습니다. 하지만 제가 원하던 기능이 잘 보이질 않았습니다. 보통의 타..

이것이 코딩 테스트다 - Chapter10 그래프 이론 정리

"그래프 이론"이란 코딩 테스트에서 자주 등장하는 기타 그래프 이론 공부하기 이론의 마지막 챕터로 그래프 이론에 대해 정리한다. 1. 서로소 집합 공통 원소가 없는 두 집합을 의미하며, 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 즉, 겹치지 않게 집합을 나누는 자료구조이다. 이때 두가지 연산이 사용된다. 1) union연산 : 두 원소를 하나의 집합으로 묶는다. 2) find연산 : 해당 원소가 어떤집합에 속하는지를 찾아준다. 이 연산을 통해 서로소 집합을 구현할 수 있다. 이때, 트리 자료구조를 사용하여 동일한 루트로 묶는것으로 집합을 나누게 된다. 1) union 연산 : 두 원소의 루트 중 작은원소를 루트로 삼아 묶는다. 2) find연산 : 해당 원소의 루트 원소를 반..

이것이 코딩 테스트다 - Chapter9 최단 경로 정리

"최단 경로"란 특정 지점까지 가장 빠르게 도달하는 방법을 찾는 알고리즘 이번에는 DFS, BFS와는 별개로 최단경로에 관련하여 "다익스트라"와 "플로이드 워셜" 알고리즘에 대하여 알아보겠다. DFS, BFS와 차별점은 "간선의 값이 존재하며, 간선값에 따라 경로가 달라진다는 점이다" 그렇기에 GPS에서 소프트웨어의 기본 알고리즘으로 채택되는 중요한 개념이다. 먼저 "다익스트라" 알고리즘부터 알아보겠다. 1. 다익스트라 알고리즘 특정한 노드에서 출발하여 각 다른 노드까지의 최단 경로를 구해주는 알고리즘 다만, 음의 간선이 없을때 정상작동이 된다. 이때, 최단 거리 테이블 개념이 사용된다. import heapq import sys INF = int(1e9) input = sys.stdin.readline..

이것이 코딩 테스트다 - Chapter8 다이나믹 프로그래밍 정리

"다이나믹 프로그래밍"이란 한번에 계산한 문제는 다시 계산하지 않도록 하는 알고리즘 즉, 중복 계산하는 비효율적인 방법이 아닌, 한번만 계산하는 효율적인 알고리즘이 되겠다. 여기서 그러면 비효율적인 방법에 대한 대표적인 예시로 "피보나치 수열의 재귀함수" 방식을 보겠다. def fibo(x) : if x == 1 or x == 2 : return 1 return fibo(x-1) + fibo(x-2) 여기서 fibo(4)를 구한다고 보면 fibo(4) = [fibo(3) + fibo(2)] = [ [fibo(2) + fibo(1)] + [fibo(1) + fibo(0)] ] = [ [ [fibo(1) + fibo(0)] + fibo(1)] + [fibo(1) + fibo(0)] ] 즉, 같은연산이 중복된..

이것이 코딩 테스트다 - Chapter7 이진 탐색 정리

"이진 탐색" 이란 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘 앞서 정렬의 방법에 대해 알아보았다. 정렬은 사실 "탐색"을 쉽게 하기 위한 선과정에 속하기도 하다. 그 이유에 대해서는 조금뒤에 알아보겠다. 먼저 탐색에 대해 알아보겠다. 1. 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법이다. 이 방법은 구현하기 간단하며, 시간이 충분하다면 원하는 값을 찾을 수 있다. def sequential_search(n, target, array) : for i in range(n) : if array[i] == target : return i+1 n개의 데이터를 앞에서부터 하나씩 확인하기 때문에 최대 n번 확인한다는 점이 특징이다 시간복잡도 :..

이것이 코딩 테스트다 - Chapter6 정렬 정리

"정렬" 이란 연속된 데이터를 기준에 따라서 순서대로 나열하기 위한 알고리즘 정렬의 경우 항상 사용하게 되는 기법중 하나이다. 최소값, 최대값을 구하기 위하여 정렬 후 맨앞, 맨뒤 데이터를 접근하기 때문이다. 또한, 정렬이 되면 뒤에서 배울 "이진탐색"이 가능하여 진다. 여기서 정렬의 방법이 다양하지만, 그중 4가지 정렬에 대하여 알아보겠다. 1. 선택 정렬 정렬이 안된 부분 중 가장 작은값을 맨 앞으로 보내는 방법이다. 이중 for문을 통해 구현한다. array = [7,5,9,0,3] 배열이 이렇게 주어져 있다면 for i in range(len(array)) : #작은값의 인덱스 min_index = i for j in range(i+1, len(array)) : if array[min_index]..

이것이 코딩 테스트다 - Chapter5 DFS, BFS 정리

"DFS, BFS" 이란 그래프를 탐색하기 위한 대표적인 두 가지 알고리즘 여기서 탐색이란 "원하는 데이터를 찾는 과정"을 말하기에 그래프 탐색이란 "그래프 내에서 원하는 데이터를 찾는 과정"을 일컬는다. 여기서 기초적으로 그래프 탐색 전에 알아야 하는 자료구조 개념이 필요하다. 1. 스택 Stack 스택은 선입후출 구조로 쌓이는 구조라 생각하면 된다. 재귀함수에서 사용되며, 재귀함수는 DFS에서 사용된다. 2. 큐 Queue 큐는 선입선출 구조로 차례로 들어온대로 나가는 구조라 생각하면 된다. BFS에서 사용된다. 3. 재귀함수 Recursive function 재귀함수는 함수가 함수를 다시 부르는 경우이다. 보통 연쇄적으로 계산되는 경우 종료조건을 만족할때까지 재귀가 이뤄지다가 다시 반환되며 종료되는..

이것이 코딩 테스트다 - Chapter4 구현 정리

"구현" 이란 머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하기 구현 파트는 다른 파트와는 다르게 별다른 특별한 방법없이 "묵묵히 주어진대로 구현" 하는 파트이다. 하지만 그래도 몇가지 특징이 있다. ✓ 완전탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 ✓ 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례로 직접 수행 일명 "피지컬" 이라고 불릴만큼 차근차근 잘 풀어내는 스킬이다. 여기서 개인적으로 느낀 키포인트는 " 반복문을 통해 전체 케이스를 올바르게 잘 나눌 수 있는가? " 이렇게 느껴진다. 여기서 중요한점은 " 입력 숫자의 범위 "와 " 제한된 용량 ", " 제한된 시간 "을 주의해야 한다는 점이다. 다른언어의 경우 int형을 벗어나는 경우 long long 형 ..

이것이 코딩 테스트다 - Chapter3 그리디 정리

앞으로 한챕터가 끝나면 해당 챕터의 내용에 대해 간략하게 요약정리를 하며 글을 남기겠다. "그리디" 알고리즘이란 현재 상황에서 가장 좋아 보이는 것만을 선택하는 알고리즘 이렇게 부제목이 달려있다. 보통 탐욕법(욕심쟁이 알고리즘) 으로 불리기도 한다. 그러면 이제 어떤상황에서 그리디가 사용되는가? ✓ 거스름돈 -> 가장 큰 화폐부터 지급 방법 ✓ 특정 수를 가장적은 횟수로 쪼개기 -> 정렬이 함께 사용되어 큰수 먼저 쪼개는 방법 사실 읽어보면 당연한거 아닌가? 싶은 느낌이 들기도 한다. 여기서 개인적으로 느낀 키포인트점은 반복문(while) 내에서 각 케이스에 해당되겠금 접근하는것도 맞는 방법이지만 "빼거나 나누는 큰수의 규칙을 찾아 한번에 계산되는 방법이 있을까?" 이것부터 생각해보는게 중요한 것 같다...