→ Problems

· → Problems
문제 소개포도주 잔을 2잔 연속해서 마실수있고, 주어진 n개의 포도주의 양중에 최대로 마실수 있는 포도주의 양을 출력하는 문제이다. 문제 풀이와인을 마실경우를 O라고 생각하고 마시지 않을 경우를 X라고 생각하면 앞을 고려하지 않는다면 다음과 같은 경우가 최대가 될 것이다.하지만 여기서 문제가 있다. 1번 2번 케이스일 경우 앞에서 어떠한 케이스인지 모르기 때문에 함부로 2번 연속해서 마시거나 1번 마실수가 없다. 이미 앞에서 마셨을수도 있기 때문이다. 그렇다면 1번 2번 케이스의 X의 앞을 살펴보면 가장 최선의 선택을 했을 경우라는 것을 볼 수 있다. 그렇다면 이렇게 생각해보면 어떨까? 내가 생각하기에 다이나믹 프로그래밍은 "내가 계산한 값에 대한 믿음" 이다. 내가 앞에서 계산한 값이 무조건 최선이라고..
· → Problems
문제 소개 1929번: 소수 구하기첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.www.acmicpc.net첫째 줄에 m, n이 주어지면 m이상 n이하의 자연수를 출력하는 문제이다. 문제 풀이2부터 시작해서 배수를 소거해나가는 "에라토스테네스의 체" 알고리즘을 사용했다. 배열을 편하게 index와 숫자를 동일시해서 Array(0...n)으로 배열을 초기화 해주었다. 그리고 어떠한 수의 배수가 된다면 1로 변경하였다. Int(sqrt(Double(n))) + 1 이 부분은 어떤 의미이냐면 2부터 n까지의 모든 숫자의 배수를 하나하나 대조해보는 것이 아니라 100인 경우 10까지만 생각하면 된다는..
· → Problems
문제소개 1918번: 후위 표기식첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net우리가 주로 사용하는 중위표기식을 후위표기식으로 바꾸는 문제이다. 문제 풀이후위표기식 규칙과 stack을 통해 후위 표기식을 만들 수 있다.후위표기식 규칙1. 연산자가 아닌 경우 postfix에 추가한다. 2. 스택이 비어있는 경우 연산자를 스택에 넣어준다. 3. 스택이 비어있지 않은 경우 스택의 마지막 연산자가 "(" 이거나 우선순위가 낮을 때까지 스택의 마지막 요소를 postfix에 추가한다. 4. ")" 가 나왔을 경우 "(" 가 나올 때까지 스택..
· → Problems
문제 소개 17299번: 오등큰수첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.www.acmicpc.netAi가 수열 A에서 등장한 횟수를 F(Ai)라고 했을 때, Ai의 오등큰수는 오른쪽에 있으면서 수열 A에서 등장한 횟수가 F(Ai)보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오등큰수는 -1이다. 설명하기가 좀 복잡해서 아래 문제 캡처를 첨부한다. 문제 풀이처음 등장한 횟수를 어떻게 저장할까 고민했는데, 가장 효율적으로 접근이 가능한 데이터 구조는 딕셔너리 구조라고 생각했다. 따라서 아래와 같이 딕셔너리에 반복되는 횟수를 저장해 줬다.l..
· → Problems
문제 소개 10799번: 쇠막대기여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저www.acmicpc.net아래와 같이 ()로 이루어진 문자열이 주어졌을 때, 막대기는 몇조각으로 나뉠수 있는지를 물어보는 문제이다. 문제 풀이텍스트 대치 활용레이저를 "-" 로 바꿔준다음 "(" 가 나오게 된다면 막대기의 갯수를 더해주고, ")" 가 나오게 된다면 막대기의 갯수를 빼주고 count에 1을 더해주면 된다. 그리고 "-" 레이저가 나왔을때에는 총 조각의 count에 현재 막대기의 갯수를 더해준다. replacingOccurrences라는 것을 활용하면 쉽게 풀 수 있다.import..
· → Problems
문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제가 아주 심플한데, n명의 병사, k번의 무적권(?)을 가지고 enemy 배열이 주어졌을 때 최대 몇 라운드까지 갈 수 있는지를 구하는 문제였다. 문제 풀이 과정 문제 접근은 아래와 같다. 우선 무적권를 초반에 몰아서 쓴다. 그리고 그것을 stack에 넣어서 stack의 요소 중에 가장 적은 요소보다 큰 enemy가 나왔을 때 무적권을 취소하고, 그 enemy에 무적권을 쓰고, 그 제일 작은 요소에 병사를 사용하는 것으로 문제를 해결했다. 일종의 그리디 알고리즘 느낌이랄까...? 그때그때 최적을..
· → Problems
문제 설명 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr시소 짝궁을 구하는 문제인데, 시소의 길이는 2, 3, 4가 있다. 만약 무게가 [100,180,360,100,270] 라고 한다면 [100, 100]은 시소 짝궁이 되고, [180, 360]도 4, 2길이에 앉게된다면 시소 짝궁이 된다. 문제 풀이무게의 배열이 10만개가 주어지기 때문에 이중 for문을 하기에는 시간초과가 확실했다. 어떻게 하면 for문을 중복해서 사용하지 않을 수 있을까? 생각보다 정말 간단하게 접근이 가능했다. 우선 same 배열, multi 배열을 만들어서 무게의 최댓값이 1000..
· → Problems
문제 소개 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 숫자의 배열이 주어지면 자신보다 뒤에 있는 숫자 중에 자신보다 크면서 가장 가까이 있는 수로 바꾸고 없다면 -1로 바꾸는 문제이다. 예를 들면 [2, 3, 3, 5]가 주어지면 [3, 5, 5, -1]을 출력해야 한다. 문제 풀이 뒤에 있는 숫자 중 자신보다 크면서 가장 가까이 있는 수라는 점에서 뒤에서 접근해야 한다는 힌트를 얻었다. 자기와 가장 가까워야 한다는 조건이 있어 정렬은 의미가 없다. 뒤에서부터 접근하면서 가장 마지막 값과 비교가 필요하다는 점에서 stack구조를 떠올렸다. 아이디어는 ..
Swift librarian
'→ Problems' 카테고리의 글 목록 (10 Page)