Algorithm25 Swift) 프로그래머스: 평균 구하기 개인 공부를 토대로 작성한 내용입니다. 잘못된 내용 전달이 있을 수 있습니다! 피드백 주시면 감사히 받겠습니다:) https://school.programmers.co.kr/learn/courses/30/lessons/12944 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 프로그래머스의 연습문제이다. 사실 매우 쉬운 문제이지만 고차 함수와 더 친해지기 위해서 요즘 쉬운 문제를 풀어보고 있다. 처음부터 고차함수를 쓰기에는 익숙지 않아서 나의 경우에는 먼저 일반적으로 내가 풀어온 방식(조건문이나 반복문 등)으로 풀고 그 후에 정답이면 그 코드를 고차 함수로.. Algorithm 2022. 7. 15. Swift) 백준 2609번: 최대공약수와 최소공배수 https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 최대공약수 먼저 공약수란 두 수 이상의 여러 수의 공통된 약수를 의미한다. 최대공약수는 두 수 이상의 여러 수의 공약수 중 최대인 수를 가리키는데 즉, 주어진 두 수로 나누어 떨어지는 수 중 가장 큰 수이다. 예를 들어 30과 15의 최대공약수는 15가 된다. 두수로 동시에 나누어 떨어지는 걸 for문을 이용하기로 했고 아래는 설계 과정이다. 1부터 두 수중 큰수까지 for문을 통해 순회한다. 만약 두 수로 동시에 나누어 떨어지면 선언해놓은 변수에 넣어준 후 다시.. Algorithm 2022. 5. 26. Swift) 백준 1929번: 소수 구하기 https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 바로 전 문제인 소수 찾기와 유사하다. 대신 이문제는 범위가 주어지고 그 범위 안에서 소수인 수를 찾아서 출력한다는 점이 다르다. 처음에는 소수 찾기에서 하나씩 나눠서 판별한 for문을 다시 쓸까 생각을 했지만 우선 그때 생각한 것처럼 더 나은 방법이 있다고 생각해 다른 방식으로 풀고 싶었고 범위는 1,000,000까지 주어지기 때문에 주어진 범위를 돌아야 할 for문까지 합치면 너무 복잡해질 것 같아서 소수를 판별하는 에라토스.. Algorithm 2022. 5. 24. Swift) 1978번: 소수 찾기 https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 소수는 1보다 큰 자연수 중에서 1과 자기 자신으로만 나누어 떨어지는 수다. 예를 들어 6은 1과 6말 고도 2와 3으로도 나누어 떨어지므로 소수가 아니지만 7은 1과 7 말고는 나누어 떨어지는 수가 없어서 소수이다. 1차 시도: 오답 import Foundation let N = Int(readLine()!)! let primeNum = readLine()!.split(separator: " ").map{Int($0)!} var result = 0 for i in.. Algorithm 2022. 5. 21. Swift) 1037번: 약수 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 약수.. 정말 오랜만에 듣는 단어다. 문제를 보고 어떤 식으로 풀어야 할지 고민을 많이 하다가 문제를 다시 읽어보며 생각을 해봤는데, 문제에서는 양수 A에 대한 약수들이 주어진다. 특정 양수 하나를 가르키는 약수들이 주어지기 때문에 이 약수들에서 답을 도출해 낼 수 있다고 생각하였고 어렸을 때 약수들을 정렬을 해서 양쪽 끝끼리 짝을 지어 곱하면 찾고 싶은 양수가 나왔던 기억이 있어서 약수들.. Algorithm 2022. 5. 20. Swift) 9095번: 1, 2, 3 더하기 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 동적 프로그래밍 즉, 다이내믹 프로그래밍(DP)을 통해 문제를 해결하였다. DP는 쉽게 말해 최적의 해를 구할 때 시간이 오래 걸리거나 메모리 공간이 많이 필요한 까다로운 문제 등에서 연산속도와 메모리 공간을 최적으로 활용할 수 있는 알고리즘이다. 큰 문제를 작은 문제로 나누어 푸는 문제에서 자주 쓰이는데 이미 계산했던 케이스에 대해서는 다시 계산하지 않음으로써 효율성을 극대화 시키는 기술인 메모이제이션이 핵심이 된다. 이문제는 점화식을 통한 결과 값을 기억하고 그 점화식을 그 이상의 차원에서 .. Algorithm 2022. 5. 17. Swift) 백준 5430번: AC 정말 오랜만에 올리는 포스팅이다! 코로나에 걸려서 증상 때문에 제대로 공부를 못했었다. 이제 다시 슬슬 시작해보려고 한다! https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제를 보고 정말 간단하다고 생각했다. 명령어도 두 개밖에 없고 그 명령 자체도 내용이 전혀 복잡하지 않기 때문이다. D가 나올때는나올 때는 remove를 R이 나올 때는 reverse를 사용하여서 문제를 해결하려 했으나 시간 초과가 났다. 코로나 증상인지는 모르겠으나 집중이 너무 안돼서 중간중간에 쉬다가 생각을 해봤는데 저렇게 간.. Algorithm 2022. 4. 30. Swift) 백준 1158번: 요세푸스 문제 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제는 생각보다 간단하다. 처음으로 N명의 사람 수를 받는다. 그리고 하나의 공백 후에 수 K를 받는데, K는 제거할 사람의 순번을 말한다. 예제 입력처럼 7명의 사람과 3번째 사람을 삭제하는 경우에는 그림과 같이 작동된다. 3시간의 고난과 시련 설계를 토대로 작성한 코드다. import Foundation let input = readLine()!.split(separator: " ").map{Int($0)!} var arr = [Int]() for i in stride(from: 1,.. Algorithm 2022. 4. 20. Swift) 백준 10867번: 중복 빼고 정렬하기 readLine()!.split(separator: " ").map{ resultSet.insert(Int($0)!)} https://www.acmicpc.net/problem/10867 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net 출력 요구사항: 첫째 줄에 입력된 수를 오름차순으로 정렬한 결과를 출력한다. 이때, 같은 수는 한 번만 출력한다. 1차 제출: 정답 import Foundation let n = Int(readLine()!)! var arr = readLine()!.split(separator: " ").map{Int($0).. Algorithm 2022. 4. 20. Swift)백준 1874번: 스택 수열 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제를 이해하는 게 제일 힘들었다..😅 한 시간 넘게 문제를 이해하려고 애를 썼다. 수많은 필기를 하며 드디어 문제를 이해했다! 문제를 이해하니 구현 자체는 어렵지 않았다! 대신 코드를 간소화하며 작성을 하려고 했는데 어젯밤에 문제를 풀 당시 너무 피곤해서 자꾸 생각이 꼬이고 오히려 더 복잡하게 돼서, 이게 좋은 방.. Algorithm 2022. 4. 19. Swift) 백준 9012번: 괄호 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net ㅎㅎ... 엄청난 어려운 말처럼 보여서 처음엔 좀 쫄았다.. "()" 하나의 완성된 괄호를 vps라는 변수로 만들어서 가장 큰 괄호부터 vps들이 있는지 확인을 해야 하나.. 그러면 어떻게 구현을 하지..? 이런 고민을 많이 하게 돼서 여느 때처럼 아이패드에 필기하며 설계를 해봤다! 아무리 생각해도 굳이 vps변수를 만들어서 그에 맞는 로직을 작성하는 것 보다는 "(.. Algorithm 2022. 4. 18. Swift) 백준 10816번: 숫자 카드 2 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 숫자카드 1과 비슷한 문제지만 제공되는 숫자카드의 중복이 허용된다는 점에서 다르다. 간단하게 생각했으나 내 코드를 작성하는데만 2시간 정도가 소요되었다. 1차 제출: 시간초과 import Foundation let n = Int(readLine()!)! var nCard = readLine()!.split(separator: " ").map{Int($0)!} nC.. Algorithm 2022. 4. 16. 이전 1 2 3 다음