본문 바로가기

전체 글158

[백준] 2630 색종이 만들기 문제 : https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 풀이 : 다음과 같이 색종이가 있을때 정사각형 크기로 나눠 색종이가 모두 파란면을 또는 하얀면을 띄게 하는 작은 정사각형 색종이로 만들고 만들어진 흰 색종이 개수, 파란 색종이 개수를 출력하는 문제다. 즉 분할 정복을 통해 탑다운 방식으로 나눠진 색종이가 조건에 맞는 색종이인지 검사하면 된다. 색종이 크기가 1x1일때까지 반복하므로 재귀를 통해 해결할수 있었다... 2022. 2. 24.
[백준] 3020 개똥벌레 prefix sum(누적합) 문제 : https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net 분석 : 1. 석순과 종유석의 구분은 짝수인지 홀수인지다. 따라서 개똥벌레가 높이 1인 곳을 지난다면 종유석은 1인 높이, 석순은 H -1 인 높이를 동시에 지난다고 생각하면 된다. 2. 석순끼리의 (또는 종유석끼리의) 순서 바뀜은 상관이 없다. 개똥벌레는 N 길이를 통과하야 하기 때문이다. 석순의 길이만큼 가진 석순 개수를 배열에 저장한다. (종유석도 똑같다) 3. 높이가 H일때 개똥벌레는.. 2022. 2. 21.
Swift TIP 정리.zip swift로 코딩 문제를 풀면서 필요했던 기능들을 정리해보려구 한다. 차차 문제 풀면서 계속 업데이트 할 예정이다 정수 1개 입력 받기 var n = Int(readLine()!)! 정수형 배열 입력 받기 var arr = readLine()!.split(separator: " ").map { Int(String($0))! } 문자열 내 특정 문자의 인덱스 찾기 let input = "HAPPY" if let rangeS = input.range(of: "P") { // 2 s = input.distance(from: input.startIndex, to: rangeS.lowerBound) } if let rangeS = input.range(of: "P", options: [.backwards]) { .. 2022. 2. 18.
[백준] 13549 숨바꼭질 3 dijkstra 문제 : https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 : 숨바꼭질1 문제와 달리 이벤에는 순간이동(M x 2)시 시간은 0초라는 조건이 다르다. 즉 걷기(M-1, M+1) 조건시의 가중치와 순간이동의 가중치가 달라 최소 시간을 구하기 위해선 순간이동이 우선시 되어야 했고 거리가 작은순으로 정렬해주는 우선순위큐를 사용해 다익스크라를 적용했다. 가지 않았던 위치거나 또는 전에 갔을때의 시간보다 더 적게 걸.. 2022. 2. 17.
[백준] 1018 체스판 다시 칠하기 brute force 문제 : https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이 : 인풋으로 주어진 배열과 주어진 8x8 배열과 cnn 모델처럼 필터링하듯이 비교하는 문제였다. 따라서 브루트포스로 비교할 체스판의 범위를 먼저 정하고, 블랙으로 시작하는 체스판 or 흰색으로 시작하는 체스판 두가지 경우의 수와 대조하여 min 값을 찾아낸다. 우선 for문이 많다는 점에 시간 초과가 날까 걱정했지만 체스판의 크기 M x N 와 (50 x 50)과 만든 체스판.. 2022. 2. 17.
[백준] 1969 DNA 문제 : https://www.acmicpc.net/problem/1969 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오 www.acmicpc.net 풀이 : 감으로 열간 비교를 통해 가장 많이 나온 문자가 그 자리 인덱스라는 것을 알았지만 문자간의 거리의 차를 모두 더하는 것이 어떻게 하면 좋을지 방법이 생각나지 않았다. 그러다 https://gusdnr69.tistory.com/31 요 블로그를 참고해 문자와 달랐던 값을 열로 카운트 했다는 점이 신기했다. (아직도 배울게 너무 많다니 많.. 2022. 2. 16.
seq2seq(sequence to sequence), attention seq2seq는 챗봇(chatBot), 기계 번역(machine-traslation), STT(Speach-to-Text)등에서 사용되는 모델이다. seq2seq를 자세히 보면 Encoder와 Decoder로 이루어져있다. 인코더 모든 단어들을 순차적으로 입력 받아 마지막에 모든 단어 정보들을 압축해 context vector를 만든다. 디코더 context vector를 입력으로 하여 번역된 단어를 한개씩 순차적으로 출력한다. 위 그림을 조금 더 자세히 그려보면 사실 인코더와 디코더는 두개의 RNN이다. 인코더를 자세히 살펴보면 입력 문장은 단어 토큰화를 통해 단어 단위로 쪼개지고 단어 토큰 각각은 RNN 셀 각 시점에서 입력이 된다. 인코데 RNN 셀은 모든 단어를 입력 받은 뒤 인코더 RNN 셀의 .. 2022. 1. 25.
one-hot encoding 단어를 임베딩하는데 있어 가장 원초적인 방법 단어 집합의 크기가 차원이 된다. [the, cat, sat, on, the, mat] 5가지 단어로 이루어진 문장은 3차원의 벡터를 가진다. from konlpy.tag import Komoran import numpy as np komoran = Komoran() text = "오늘 날씨는 구름이 많아요" nouns = komoran.nouns(text) print(nouns) dics = {} for word in nouns: if word not in dics.keys(): dics[word] = len(dics) #0, 1, 2 print(dics) #one-hot-encoding nb_classes = len(dics) targets = list(d.. 2022. 1. 21.
[아키텍쳐] MVP 란 오늘은 MVx 패턴 중 MVP 패턴에 대해 알아보려구 한다!! 전에 있던 팀에서 MVP 패턴을 사용하여 개발 중이었는데 이때 ViewController 말고 Presenter 파일을 하나 더 만들어 파일이 정말 많았었던 경험에 이어 MVP 패턴에 대해 정리하고자 한다. MVP 패턴 Model, View, Presenter 3가지로 이루어진 패턴이다. MVC 패턴과 다르게 Presenter의 개념을 가지고 있다. 우리가 MVC 패턴을 활용해 개발을 하다보면 Controller가 View와 밀접하게 연관되어 View+Controller 의 꼴로 합하여 개발되는 경향이 있다. ViewController가 지닌 생명주기 역시 고려해야 하기 때문에 대규모 프로젝트에 있어 Controller가 더욱이 비대해진다. .. 2022. 1. 6.
[아키텍쳐] MVVM (clean-architecture) 이란 오늘은 가장 많이 쓰이는 MVVM 패턴에 대해 다시 정리를 해보려구 한다. 기존 MVC 패턴이 View와 Controller 간 분리가 되지 않아 비대해진다는 문제점이 있었다. MVVM 패턴은 view, view model, model 이렇게 3가지 분리를 통해 그 문제점을 해결한다 앞으로는 model의 변화를 view model이 책임지고 view는 model가 직접적인 연결 없이 view model을 통해 view 자신을 업데이트 한다. 여기까지는 내가 알고 있던 MVVM 패턴이었구 MVVM 패턴에 Repository ?? 를 쓰는 경우를 발견해서 궁금해서 정리 해보려고 마음 먹게 되었다. 아래 깃헙을 참고하여 정리해보려구 한다. https://github.com/kudoleh/iOS-Clean-Ar.. 2021. 12. 22.
[리트코드] 238. Product of Array Except Self 문제 : https://leetcode.com/problems/product-of-array-except-self/ Product of Array Except Self - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 분석 : 이 문제는 구간곱 문제다 조금 푸는 방법이 신기해서 기록해보려구 한다!! (절대 생각도 못한 방법 .. ㅠ) 처음엔 자기 자신을 제외한 곲이라 해서 1. nums 배열을 복사한 copy한 배열 생성 2. 배열 내 모든 곲을 곱한 뒤 제외한.. 2021. 12. 10.
1. Embedding 1.1 임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 벡터로 바꾸는 과정 1.2 임베딩의 역할 1) 단어/ 문장 간 관련도 계산 단어를 벡터로 표현하는 순간 단어간의 유사도를 계산 가능 ex> 코사인 유사도 2) 의미/문법 정보 함축 벡터간의 사친 연산으로 단어 간의 유추 평가 가능 ex> 단어1 + 단어 2 - 단어 3 = 아들 + 딸 - 소년 = 소녀 3) 전이 학습 단어를 임베딩 한 값이 input 으로 쓰인다. 1.3 임베딩 기법 0) 그 전에 시소러스를 활용한 방법 (시소러스 기반 기법) wordNet수많은 단어에 대한 동의어와 계층 구조 등 정의 하지만 수작업으로 시대 변화에 대응하기 어렵다. 비용이 많이 든다. 단어간 미묘한 차이를 표현 할 수 없다. nlp에서 가장 유명한 시소러스.. 2021. 12. 10.
[백준] 7576 토마토 BFS 문제 : https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 분석 : 이런식으로 토마토 농장이 존재 할때 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸 을 의미한다. 익은 토마토 중심으로 상하좌우로 하루마다 토마토가 익는데 몇일이면 농장 내 모든 토마토가 익는지 날짜를 출력하는 문제였다. 우선 토마토 농장을 탐색한다는 점에서 BFS, DFS로 접근해야 한다 생각했고 탐색을 하면서 방문하지 .. 2021. 12. 10.
[아키텍쳐] Viper 란 요즘 mvvm 패턴이 무엇인지 알고 나니까는 또 다른 아키텍쳐는 없나 마구 깃헙을 찾아보는 중이다 잠깐 여유가 생겨서 (곧 기말고사 + 과제 + 텝스 셤 .. 크흠) viper 아키텍쳐에 대해 정리해보려구 한다 !! viper 아키텍쳐는 초면은 아니다 그렇다고 구면도 아니지만은 하하 요걸 깃헙 스타에 찜해둔게 생각나서 패턴을 조금 살펴보고 예제로도 실습해보려고 한다. https://github.com/MindorksOpenSource/iOS-Viper-Architecture GitHub - MindorksOpenSource/iOS-Viper-Architecture: This repository contains a detailed sample app that implements VIPER archite T.. 2021. 11. 29.
[RxSwift] 2. Subject와 Relay 오늘은 subject란 무엇인지에 대해 공부해보겠습니다 subject는 observable과 observer의 역할을 모두 수행하는 bridge/proxy입니다. 그러니까는 데이터를 넣어줄수도(onNext), subscribe 할수도 있다는 거죠 ! observer처럼 subscribe할 수 있지만 subject는 여러 observer 구독 가능한 multicast 이고 observable는 하나의 observer만 가능한 unitcast입니다. unicast와 multicast는 어떤 차이가 있을까요 ? 일반적인 Observable은 어떠한 상태도 가지지 않습니다. 따라서 모든 Observer가 구독하게 되면 그때마다 새로 생성(create)하여 발행하는 과정을 거치게 됩니다. let randomNum.. 2021. 11. 20.
[RxSwift ] 1. Observable이란 RxSwift에 대해 공부하려고 보니 숨이 턱턱 막히는 거 같아서 개념을 흝어 보는거 말고 내 나름대로 정리해야겠다는 필요성을 느꼈다 ..! 그래서 오늘부터 TIL 식으로 하나 하나씩 뽀개보려고 한다 차차 굵은 뼈대부터 잡고 세세하게 마스터 하는 것이 목표다 RxSwift(알스)야 친해지자아 🐰🐵🦄 그래서 오늘은 첫번째로 가장 중요한 개념 Observable에 대해 살펴볼것이다 조금씩 더 알게 되면은 추가할 예정이다 참고한 글은 공식 docs를 참고하였다 http://reactivex.io/documentation/observable.html ReactiveX - Observable Observable In ReactiveX an observer subscribes to an Observable. The.. 2021. 11. 15.
[아키텍쳐] RiBs tutorial1 따라하기 RIBs란 우버에서 만든 cross 아키텍쳐 패턴이라고 합니다 https://github.com/uber/RIBs GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. Uber's cross-platform mobile architecture framework. - GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. github.com rib 이름에서 알 수 있듯이 router, interactor, builder 이 세가지가 핵심이구 이들을 차차 살펴보도록 하겠습니다 ! 그중 오늘은 tutorial1을 우버에서 제공한 wiki와 함께 자세히 따라 해.. 2021. 11. 13.
수근수근 개인정보처리방침 ('https://jouureee.tistory.com/'이하 '만능앱 수근수근')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. ○ 이 개인정보처리방침은 2021년 9월 12부터 적용됩니다. 제1조(개인정보의 처리 목적) ('https://jouureee.tistory.com/'이하 '만능앱 수근수근')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할.. 2021. 9. 12.
[프로그래머스] 표편집 2021 카카오 인턴십 STL(set) 문제 : https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 분석 : 주어진 표 정보를 벡터에 담아 erase, insert등 기본 STL 방식으로 접근했었다. 테스트 케이스는 맞았으나 정확성 테스트, 효율성 테스트에서 segmentation fault 에러를 받았고 벡터 공간을 지우고 다시 삽입하는 과정에서 인덱스 범위를 넘어서는 것 같은 오류를 범한거 같다. .. 2021. 9. 9.
[백준] 15681 트리와 쿼리 DP + DFS 문제 : https://www.acmicpc.net/problem/15681 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net 분석 : 밑에 알고리즘 분류를 보았을 때 '트리에서의 DP' 가 눈에 띄었다. 트리에서의 DP ? 그게 뭐지 그러면 트리 자료 구조를 구현해야 하는 건가 ... 싶어 다른 블로그들을 참고하였다. https://chanhuiseok.github.io/posts/algo-56/ 알고리즘 - 트리 DP 문제 풀기(트리에서의 Dyna.. 2021. 9. 9.