본문 바로가기

분류 전체보기

(268)
[Swift] where keyword. 언제 사용할 수 있는지 탐구하기!! 안녕하세요. 언젠가 한 번 정리하려고 했던 where키워드를 복습할 겸 정리하려고 합니다. where 키워드를 사용하면 정말 편합니다. Protocol extension에선 특정 프로토콜을 사용하기 위한 준수 조건을 지정하거나, array's extension에서 특정 함수를 추가했을 때 해당 함수를 사용할 수 있는 Element를 한정적으로 제한할 때, 루프, 제너릭, switch case, do-catch, guard 등 다양한 경우에 where 키워드를 사용할 수 있습니다. 그리고 특정 조건에 부합하는 filter 된 값을 받을 수 있습니다. 쉽게 생각하면 if의 조건을 where의 절에 붙인다는 느낌입니다,, 즉, where 키워드를 통해서 조건을 추가합니다. 특정 타입으로 제한하거나, 특정 조건..
[백준/Swift] 2475: 검증수 문제 2475번: 검증수 컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들 www.acmicpc.net 간단한 문제 요약 컴퓨터마다 6자리의 고유 번호가 있다. prefix 5자리까지 0~9의 수 중 하나로 채워진다. 마지막 6번째 자리가 검증수 인데 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지가 들어간다. 문제 풀이 readLine으로 string을 입력 받고 split함수를 활용해 " " 여백을제거하며 여백 사이에 있는 각 숫자 문자열을 Int로 변환과 동시에 제곱합니다. reduce로 더할 때 % 연산을 통해 나머..
[백준/Swift] 4354: 문자열 제곱 | PS일지 문제 4354번: 문자열 제곱 알파벳 소문자로 이루어진 두 문자열 a와 b가 주어졌을 때, a*b는 두 문자열을 이어붙이는 것을 뜻한다. 예를 들어, a="abc", b="def"일 때, a*b="abcdef"이다. 이러한 이어 붙이는 것을 곱셈으로 생각한다 www.acmicpc.net 간단한 문제 요약 문자열 S가 주어졌을 때 어떤 문자열 a에 대해 s=a^n을 만족하는 가장 큰 n을 찾으시오. 문자열 곱셈에 대해서 a^0 = "" (빈 문자열) a^(n+1) = a*(a^n) 으로 정의 됩니다. 문제 풀이, 느낀점 "주어진 문자열S에서 어떻게 하면 부분 문자를 선정해 반복적으로 곱하면 S를 만들 수 있을까?.." 가장 유리한 것은 s문자열의 첫 문자부터 prefix로 하는 부분 문자열의 최소 길이를 ..
[백준/Swift] 2096: 내려가기 | PS일지 문제 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 간단한 문제 요약 첫 줄에서 마지막 줄로 내려가는 게임이다. 맨 첫 줄의 시작은 별표의 위치이다. 그리고 각각의 칸에는 숫자가 있다. 위 층(별표)에서 아래층으로 내려갈 수 있는 경우는 각각의 별표 아래 동그라미 친 경우 이다. 마지막 줄로 내려갔을 때 얻을 수 있는 (방문한 칸 숫자 누적 합산)최대, 최소 점수를 구하시오!! 문제 풀이, 했갈렸던 점 어떻게 하면 문제를 풀 수 있을까? 고민했습니다. 그래프 형식의 input만 보면 dfs, bfs가 자꾸 생각나네요. d..
[Swift/백준] 2309: 일곱 난쟁이 + map의 특징 | PS일지 문제 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 간단한 문제 요약 난쟁이가 9명 있었다. 근데 찐 난쟁이는 7명이다. 그리고 이들의 특징은 7명의 키를 더한 값은 100이라는 것이다. 이상한 난쟁이를 빼고 진짜 7명의 난쟁이의 키를 순차적으로 출력하시오! 고려해야 할 사항 난쟁이를 찾을 수 없는 경우 x 아홉 난쟁이는 모두 키가 다릅니다. 정답이 여러 개가 될 수 있습니다. 문제 풀이, 느낀점 문제 풀이 9C2 9명 중 2 명을 선택해서 전체 키에서 선택된 두명의 키를 뺐을 때 답이 정답입니다. 두명을 선택하기 ..
[백준/Swift] 7575: 바이러스 | PS일지 문제 7575번: 바이러스 첫 번째 줄에는 감염된 프로그램의 개수 N 과 바이러스 코드 추정을 위한 최소 길이를 나타내는 정수 K 가 주어진다. 단, 2 ≤ N ≤ 100이고, 4 ≤ K ≤ 1,000이다. 두 번째 줄부터 각 프로그램에 대한 www.acmicpc.net 간단한 문제 요약 백신 프로그램 개발을 위해서는 바이러스 코드를 알아야 한다. 여러 프로그램에서 공통으로 존재하는 부분이 바이러스로 의심된다. 바이러스는 자신의 코드를 반대로 기입할 때도 있다( 공통으로 존재하는 의심 피하려고). 공통으로 나타나는 코드 길이 K인 경우에 바이러스 코드로 추정한다. 추정되는 바이러스 코드를 구하자! 문제 풀이 프로그램 1: 10 8 23 93 21 42 52 22 13 1 2 3 4 프로그램 2: 1 3 ..
[백준/Swift] 1701: Cubeditor | PS일지 문제 1701번: Cubeditor Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고생한 www.acmicpc.net 간단한 문제 요약 어떤 문자열내에서 같은 부분 문자열이 두 번 이상 나오는 문자열을 찾는데 이때 두 부분 문자열은 겹처도 된다. 가장 길이가 긴 것을 구하는 프로그램을 작성하시오. 문제 풀이, 했갈렸던 점 주어진 문자열을 pattern 이라 부르겠습니다. 정답은 pattern 내 여러 substring 중 같은 substring 두 개 이상 나와야 합니다. 그 substring은 같은 substring들 중에서 길이가 ..
[Swift] GCD 개념 정리 | No7. GCD 안녕하세요. 이번 포스트는 GCD를 공부하면서 배운 개념들을 전부 정리하려고 합니다. 1. Concurrency and Parallelism Concurrency and Parallelism 개념 정리 포스트 1 편, 2 편 Parallelism은 하드웨어, 기계적 성질입니다. Concurrency와 마찬가지로 multi task를 할 수 있습니다. 다만 multi core일 때 가능합니다. 반면 concurrency는 single core, multi core 둘 다 concurrency한 동작을 할 수 있습니다. time-slicing과 context switch를 통해 task 수행 전환이 가능합니다. 개발을 하다보면 concurrent task 실행이 반드시 필요합니다. Concurrency ta..