SHA(secure hash algorithm)SHA-256 은 해시 알고리즘의 종류 중 하나이다.Swift 에서 어떤 데이터를 SHA-255 해시값으로 전환하려면 cryptoKit 모듈을 사용해야한다.이때 shaData를 출력해보면 다음과 같이 출력된다.
Disjoint Set을 표현할 때 사용하는 알고리즘으로 트리 구조를 활용하는 알고리즘간단하게 노드들 중에 연결된 노드를 찾거나, 노드들을 서로 연결할 때 사용한다Disjoint Set 이란서로 중복되지 않는 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는
테스트 케이스의 개수가 10,000,000 정도로 매우 많고, 수의 범위가 1~10000으로 제한적인 경우 계수정렬을 사용한다.배열의 인덱스를 특정 데이터의 값으로 여기는 정렬 방법이다배열의 크기는 데이터의 범위를 포함할 수 있도록 설정데이터가 등장한 횟수를 셈데이터:
readLine()으로 받아온 문자열을 처리하는 방법에는 split 과 component 두 가지가 있다.이렇게 두 개가 있는데 split은 substring 배열 substring 을 반환하고,component는 string 배열 String을 반환한다.이 때 대부분
문제 링크이 때 중요한 점은 readLine().split으로 얻게되는 String 이 배열의 원소를 어떻게 뒤집느냐 인데나는 다음과 같이 배열을 하나 생성하여 알파벳을 그 배열의 제일 첫 번째 위치에 넣도록 하여 순서를 바꿔주었다.그러나 다른 분들의 방법을 보니 그저
"("와 ")"가 쌍으로 존재하면 되기때문에"("인 경우 count 변수를 +1, ")"인경우 count 변수를 -1 해주고최종적으로 count의 값이 0이 된다면 YES를 출력하도록 하였다.그러나 이 때, "())(()" 와 같이 count의 값은 0이지만, 한 쌍의
문제링크 두 개의 스택을 사용하여, 커서의 이동에 따라 원소를 왼쪽이나 오른쪽으로 옮겨주면 되는 문제이다. 예를들어, abc 가 있을 때 "L"명령어를 받는다면 커서가 왼쪽으로 이동해야하기 때문에 ab|c 와
문제 링크1번부터 N번까지 사람이 모두 제거될 때까지 K번째 사람을 제거해야하는데, 이때 K번째는 항상 맨 처음에서 시작하는 것이 아니고 제거된 사람에서 K번째이기 때문에 나는 위치 값(count)를 따로 두었다. 위치값은 항상 K만큼 증가하지만 사람 수보다 적어야하기
문제링크덱은 double-ended queue로 양쪽 끝에서 삽입 및 삭제가 가능한 자료구조이다.큐를 구현하듯이 구현하면 되는데 우선 통과된 최종 코드는 다음과 같다.removeLast() vs popLast() : 둘 다 배열의 마지막 값을 제거하고 반환함remove
문제 링크출력할 때 태그 안의 문자는 뒤집히지 않고, 태그 밖의 단어들은 공백을 기준으로 나뉘어져 뒤집어지기에 이 둘을 기준으로 잡아야했다.뒤집어지지 않는 태그는 tag로, 뒤집어지는 단어는 word로 구분한다.먼저 for루프문을 사용하여 입력 받은 문자열에서 해당 c
문제링크솔직히 말하자면, 못풀었다 🥲그래서 이 풀이 푸신 분들 블로그 풀이 참고해서 풀었다 (링크 걸어도 될지,, 모르겠어서 안걸었지만,, 구글에 쳐서 나오는 swift풀이 몇 분 안계신데 그 분들꺼 다 봤어요)그리고 백준 사이트에서 다른 분들 풀이도 본 결과!! 핵
문제 링크처음엔 for문을 이중으로 사용해서 풀었었다..다음과 같이 풀었고 당연히,, 시간초과되었다.수의 범위를 보면 당연한데 이걸로 테스트케이스들이 해결되니 미련을 못 버리고 이걸로 자꾸 뭘 하려고 했음^^,,;;;어쨌든, 얘를 버리고 문제 아래에 알고리즘에 stac
문제 링크앞전에 오큰수를 풀었어서 조금은 쉽게 해결이 가능했다!이번엔 배열을 세 개 사용하였다.numArray : readLine()으로 받은 배열count : 각 원소의 개수를 저장하는 배열, 이 때 count의 위치는 numArray의 원소 값이다.stack : 오
문제 링크후위표기식이란?: 연산자를 피연산자 뒤에 놓는 표기 방식예를 들어, 우리는 일반적으로 연산자를 피연산자 사이에 두어 1+2 = 3 과 같이 표기하지만 (중위표기식)컴퓨터에게는 12+ 와 같은 후위표기식이 더 이해하기 편하다.스택을 이용하여 간단하게 풀이할 수
문제 링크중위표기식을 후위표기식으로 바꿔주는 문제이다.먼저 연산자를 담을 opStack이 필요하다.알파벳은 그대로 출력하고,연산자인 경우 opStack안의 연산자와 우선순위를 비교하여 자신보다 opStack의 제일 윗 연산자가 우선순위가 높다면,opStack에 remo
문제 링크유클리드 호제법을 몰랐기 때문에https://tech.lonpeach.com/2017/11/12/Euclidean-algorithm/이 분의 설명을 보았다!먼저 숫자 a, b가 있다 (이때 a>b이다)a를 b로 나누는데, 이 때나머지 r이 0이라면 :
문제 링크소수찾기 문제는 다양한 방법으로 풀 수 있다가장 쉬운 방법은2부터 해당숫자 전까지 모든 수로 나눠보는 것이다.위 문제는 시간 제한이 길어서 이와 같이 풀이해도 괜찮다..!또는 해당 숫자의 제곱근까지만 계산해도 소수를 판별할 수 있다.예를 들어숫자 10인 경우
문제 링크먼저 이전에 배운 '에라토스테네스의 체'를 이용하여범위 안의 숫자들의 소수를 판별하고,소수들 중에서 덧셈 쌍을 구하면 되는 문제이다.풀이는 쉬운데 시간초과가 많이 나서 애를 먹었다ㅠ먼저 처음엔 다음과 같이 풀었다.입력받은 숫자 범위 안에서 primeNum함수를
문제 링크매우 쉽게 풀 수 있는 문제인데 'replacingOccurences(of:with:)' 자체를 몰라서 너무 복잡하게 풀었다ㅠㅠreplacingOccurence(of: with:)란?func replacingOccurrences(of target: String
문제 링크처음 생각한 풀이는 팩토리얼을 구해서 10, 10^2, 10^3..으로 나누려고 했었다.그래서 그렇게 풀었는데,, 런타임에러가 났다왜냐하면 문제에서 입력한 N의 범위가 0에서 500이하이기 때문임ㅠ그래서 다른 방법을 생각해야했다..뒤에서부터 0의 개수는 10의
문제 링크 수능이 까마득해서리,, 조합이 뭔지 기억도 안났다 조합은 여기 밑에 nCr인데,, 조합이 팩토리얼로 구성되어 있는 걸로 봐서 조합의 0의 개수는 이전의 팩토리얼 0의 개수 구하기를 조금 변형하여 구할 수 있을 것 같다 입력받은 수 n, m이 있을 때 (
n진법 -> 10진법 또는 10진법 -> n진법 으로 변환하는 방법은 매우 간단하다. n진법 -> 10진법으로 변환하는 경우 이때, n진법으로 작성된 수는 항상 문자열로 취급해야한다 (n != 10) 따라서 다음과 같이 작성하면 된다. 36진법으로 작성된 "zzz
문제 출처처음 풀어본 다이나믹 프로그래밍 문제이다.다이나믹 프로그래밍(동적계획법)이란?큰 문제를 작은 문제로 나누어 풀이하는 방법이다.이 문제는 연산의 최솟값을 구하는 문제인데dynamicArray 배열을 만들어 결정된 최솟값을 해당 배열안에 넣는다.i 가 2부터 입력
문제 링크문제를 풀기 위해서 하나하나 작성해보면 다음과 같은 규칙을 찾을 수 있습니다.1에서 8까지는dp3 = dp2 + dp2i+10일때는dp3 = dp29일때는dp39 = dp280으로 시작하는 계단수는 없지만 dp31인 경우 dp20의 값을 알아야하기 때문에 dp
문제 링크dp 배열에 해당 숫자보다 크기가 작은 숫자의 개수를 넣어 풀어주었다.수열 10,20,10,30,20,50 이 있고dp는 초기값이 1로 설정되어있는 배열이라고 생각해보자.그리고 계산의 편의를 위해 n 번째 원소의 값을 dpn-1이 아닌 dpn에 넣을 것이다.먼
문제 링크0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구해야한다.K가 1인 경우 : 숫자에 관계없이 경우의 수는 항상 1이다.K가 2인 경우 : 경우의 수는 항상 N+1이다.예를 들어, 숫자가 6인 경우 (0,6), (1,5), (2,4), (3
문제 링크만약 첫번째 집이 R을 칠한다면두 번째 집은 G 또는 BG를 칠한다면두 번째 집은 R 또는 BB를 칠한다면두 번째 집은 G 또는 R만 칠할 수 있다.이때 모든 집을 칠한 최솟값을 구해야하는데 첫번째 집의 RGB 중 최솟값으로 선택한다고 해도 그 값이 최종적으로
문제 링크N = 1일 때 : 10N = 2일 때 : 10 + 9 + 8 + ...+1 = 55N = 3일 때 : 55 + 45 + 36 + ...+ 1 = 220자릿수와 해당 수로 시작하는 오르막 수의 개수를 가지는 이차원 배열 dp를 만든다.예를 들어 자릿수(N)이
문제 링크스티커들의 합의 최대 값을 구하면 된다.처음엔 스티커의 max를 구해 그 값을sum에 더해주고 양 옆, 아래의 값들을 0 으로 바꿔주곤 했는데 이렇게 하면 값은 나오지만 시간초과가 나온다. (또한 dp도 사용하지 않은 방식이다)따라서 다른 분들의 풀이를 보고
문제 링크n번째 포도주를 마실 지 말지 결정할 때 고려해야하는 경우의 수는 다음과 같이 세 가지가 있습니다. 이 중 최대가 되는 경우를 dpn에 넣어주면 됩니다.첫 번째 경우는dpn = dpn-3 + nArrayn-1 + nArrayn두 번째 경우는dpn = dpn-2
문제 링크하아아아아 억울해 왜 이 생각을 못해냈을까 ...증가하다가 감소하게되는 가장 긴 수열을 알아내면 되는 것이기 때문에증가하는 부분수열과감소하는 부분수열을 각각 구해서그 두개를 더한 값의 최대값을 구하면 된다.이 때 주의할 점이 두 가지 있는데1\. 두 개를 더하
문제 바로가기RGB거리 문제를 풀었다면,, 도움이 많이 되는 문제이다..!RGB 거리 풀이에for 문을 넣어서 첫 번째 집의 값을 각각 R,G,B로 지정한 경우만 고려해주면 되기 때문이다!그러니까..먼저 첫번째 집의 값을 R로 지정한 경우 dp1 = Rdp1 = MAX
문제 바로가기처음 풀어본 브루트포스 알고리즘 문제!!잼땅이 문제는 가장 긴 행이나 열의 연속으로 된 사탕의 개수를 구하는 문제인데 인접한 사탕끼리 자리를 바꿀 수 있기 때문에 나는 사탕을 한번 바꿔줄 때마다, 바뀐 배열의 가장 긴 행과 열의 연속으로 된 사탕의 개수를
문제 바로가기 어려웠다 ..... 다른 사람 풀이 무진장 많이 봤다...😇 고장나지 않은 버튼을 사용해서 누를 수 있는 채널 중 이동하려는 채널과 가장 가까운 채널을 찾아 이동하는 횟수를 구해주어야한다. 예를 들어 이동하려는 채널이 5457이고 고장난 버튼이
문제 바로가기 백트래킹이란? > 가능한 경우를 전부 탐색을 하면서, 더 이상 나아갈 수 없는 경우를 만났을 때 이전으로 돌아가 다시 다른 경우를 탐색하는 유형 일반적으로 완전탐색(모든 경우의 수 확인)할 때 사용 for로 확인 불가한 경우 => 깊이(for의
문제 바로가기 처음엔 재귀함수와 백트래킹을 사용해서 풀었는데 print횟수를 줄이고, map 을 줄이는 등 뭐를 해도 시간초과가 나기에 이 풀이는 안되는거구나 했다... 시간 초과된 풀이 답은
문제 바로가기이 문제를 풀면서 알아야할 점은깊이를 알 수 없는 for문을 돌아야함 -> 재귀함수재귀함수의 종료 조건은 '현재도시 == 출발 도시'과 'result배열의 원소 개수 == n'이다.어떤 도시에서 출발하든 최소값은 같다 -> 특정 도시에서 시작하는 경우만 고
문제 바로가기문제 이름부터,, 저돌적이다..처음 생각한 풀이는 다음과 같다.예를들어, N = 4이고 입력받은 문자열S가 "-+0++++--+"라면"-+0+""+++""--""+"S를 다음과 같이 N(4)개, N-1(3)개, N-2(2)개, 1개 씩 나눠야 한다.이때 이
비트란 흔히 '8bit'라고 불릴때의 그 bit 입니다. Binary Digit의 줄임말로 이는 0 과 1로만 표현할 수 있는 이진 숫자를 의미합니다. 물리적으로 생각해본다면 켜기, 끄기 만 가능한 스위치인 것입니다
문제 바로가기 문제에서 말하는 친구관계가 살짝 이해가 안됐는데 그림으로 그려보니 흔히 말하는 한 붓그리기였다. 문제의 관계에서는 A->B->C->D->E가 성립해야하므로, 한 붓그리기의 깊이가 4가 가능하면 1을
문제 바로가기 DFS와 BFS의 기본적인 개념을 알고 이를 함수로 구현만 할 수 있으면 쉽다 BFS - 너비 우선 탐색 : 한 단계씩 내려가면서, 해당 노드와 같은 단계에 있는 노드(형제 노드)를 먼저 탐색하는 방식 DFS - 깊이 우선 탐색 : 한 노드의 자식
문제 바로가기 해당 위치에서 상,하,좌,우로 이동할 수 있는지를 확인하고 또 이동가능한 최단 거리를 구하여야하는 문제이다. 상,하,좌,우로 이동할 수 있는지 확인은 BFS로 하면 되는데 최단거리를 어떻게 구할 지가
문제 바로가기관련 문제인 숨바꼭질을 풀었다면 조금은 쉽게 풀이 가능하다동생을 찾는 시간을 구하는 건 bfs로 가능한 데찾는 경로를 저장하는 방법을 어떻게 구현할 지 애를 먹었다ㅠ처음엔, 재귀함수를 사용해서 풀이했는데 시간초과가 났다그래서 이번엔 footPrints\[]
문제 바로가기 👉🏻 (1,1)에서 (N,M)까지 이동하면서 벽을 가장 적게 부수는 경우를 알아내야한다. 여태까지는 BFS를 이용해서 최단 거리를 구하곤 했었는데, 이번엔 거리는 상관이 없고 그저 벽을 가장 적게
문제 트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오. 입력 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고(2<= V <= 100,000) 둘째 줄부터
Greedy 알고리즘 매 선택의 순간마다 당장 눈앞에 보이는 최적의 선택만을 하여 최종적인 답에 도달하는 알고리즘이다. (이러한 선택의 결과가 항상 최적이라는 보장은 없지만 그리디 알고리즘을 적용하는 문제에서는 최적이 된다.) 예를 들면? 최소 값을 찾아야하는 트
문제 바로가기 풀이 예를 들어 스위치 A, B, C가 있고 세 스위치는 모두 켜져있다고 하자. A B C 0 0 0 이와 같은 상태일 때 스위치 A를 누르면 A B C X X 0 스위치 B를 누르면 A B C 0 0 X 스위치 C를 누르면 A B C 0
문제 바로가기 풀이 범위를 나워서 풀어야하는 문제이다. 문제를 처음 봤을 땐 체스가 움직이는 네 가지 경우를 제시하기에 bfs로 푸는건가? 싶었는데 이동 횟수가 4번보다 많은 경우 이동 방법을 모두 사용해야한다는 것을 보고 조건별로 푸는 것이구나 했다. 1)
문제 바로가기행렬의 원소들의 값이 모두 같지 않다면, 그 행렬을 9개로 나누고나눠진 행렬의 원소들의 값들이 모두 같은지 계속해서 확인해야한다.구현은 어렵지 않은데 시간초과가 문제였다.나는 행렬의 가로, 세로가 3인 경우(원소가 9개 있을 때)엔 행렬을 9개로 나누지 않
병합 정렬 은근 어렵더라구용 헤헤Swift로 된 풀이도 많이 없구 😰그래서 포스트로 정리해보려합니당분할 정복 알고리즘의 하나로,배열을 두 개로 분할 하여 정렬한 후 이를 합치는 알고리즘이다.그래서 병합정렬 알고리즘의 프로세스는 분할 : 주어진 배열을 둘로 나눔정복 :
하노이탑 이동을 이제 완전히 이해할 수 있게 되었다수많은 글보다 하나의 유투브 영상이 도움이 되었는데바로 이것!차이나는 클라스에서 어떤 교수님..(?) 께서 설명해주신 영상인데 정말 큰 도움이 되었다. 이거만 보면 누구라도 하노이탑 알고리즘 이해 완 !! 위 영상을 토