목록전체 글 (58)
러닝머신 하는 K-공대생
20129번: 뒤집힌 계산기 국렬이는 신촌 연합 프로그래밍 경진대회에서 '독특한 계산기'를 Div 1 no solve 방지 문제로 냈다가 생각보다 많이 풀리지 않아서 정말 많이 반성하였다. 그 때문에 해당 문제보다 (출제자인 국렬 www.acmicpc.net 이 문제는 중위표현법을 후위표현법으로 나타내는 단순 구현문제이다. 0. 중위표현법을 후위표현법으로 나타내기 / 후위표현법을 계산하기 중위표현법을 후위표현법으로 나타낼 때는 스택을 이용하는데 stack에다가는 연산자를 result에는 피연산자를 넣어가면서 구할 수 있다. stack에서 나중에 들어간 것이 먼저 나오므로 만약 먼저 들어간 것 중에 나중에 들어간 것보다 우선순위가 같거나 높은 것이 있다면 안된다. (연산자의 우선순위가 같으면 연산 방향의 ..
개인적으로 C/C++은 아직 STL 사용법이 익숙치 않아서, Java는 잘몰라서 지금까지 개발이나 머신러닝 할 때 자주 사용했던 Python을 선호한다. Python이 보통은 C++에 비해 느리지만 PyPy3 컴파일러를 지원해줄 때에는 플래티넘을 넘어서는 문제가 아니라면 적당히 풀린다. 파이썬으로 적절한 알고리즘으로 풀이를 작성해도 시간초과나 메모리 초과가 발생할 수 있다. 적당히 시도해보고 안되면 c++등의 언어로 다시 시도해봐야 한다. 1. 쉽게 이해가 안되는 자료구조,알고리즘들을 그림으로 쉽게 설명 velog.io/@emplam27?tag=%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94 emplam27 (emplam..
20126번: 교수님의 기말고사 교수님이 시험을 시작할 수 있는 시각을 출력하여라. 시작 가능한 시각이 여러 개 있으면 그중 가장 앞선 시각을 출력한다. 시험을 치룰 수 없다면 -1을 출력하여라. www.acmicpc.net 일반적인 경우에 i번째 시험과 i+1번째 시험 사이에 끼어들려면 x(i+1) - (x(i)+y(i)) >= M 이어야 한다. 이때 i를 0부터 n-2까지 해야 0번째부터 시작해서 n-1번째 시험 사이로 끼어들 수 있다(문제에서는 1부터 카운팅하나 나는 0부터 세는게 편해서 이렇게 표현) 위 일반적인 경우를 제외하고는 가능한 경우가 0번째 시험이 시작하기 전에 시험을 진행하는 경우와 n-1번째(마지막) 시험이 끝난 후에 x(n-1)+y(n-1) + M = m: return (arr[i..
20127번: Y-수열 N개의 정수로 이루어진 수열 a1, ... , aN이 있다. 택희는 해당 수열이 증가수열 혹은 감소수열이 되게 만들고 싶다. 증가수열은 모든 i(1 ≤ i arr[i] 가 나올 때까지를 k를 1부터 증가시키고 arr[i-1] <..
11056번: 두 부분 문자열 첫째 줄에 문자열 A, 둘째 줄에 문자열 B가 주어진다. 두 문자열은 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 이 문제는 정말 모를때는 혼자 풀어보겠다고 몇시간을 투자하기 보다는 풀이를 찾아서 접근 방안과 새로운 이론이 필요하다면 그 이론을 공부할 필요가 있음을 알려주었다. 아직 기본적인 알고리즘과 자료구조에 대해 공부해야 할 점이 많다. 문제에서 원하는 부분 문자열은 subsequence(연속적이지는 않은 부분 문자열) 인데 나는 substring(연속적인 부분 문자열) 으로 잘못 이해해서 부분 문자열을 substring으로 생각한 경우에 다음과 같이 코드를 짰다. A = input() B = input() s,l = (A..
1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 뭔가 그리디 문제 같아서 처음에는 다음과 같이 접근했다. n = 42798, 고장난 버튼 = [1,3,5,6,7,9] 라고 했을 때 42까지는 그대로 사용하고 그 뒤가 800 혹은 488인 경우가 있을텐데 여기서 단순히 +,- 해서 누른 버튼의 수의 최소를 구하고자 하였다. 좀 복잡하게 구현하긴 했지만 문제에 있는 test case는 잘 작동했으나 제출해봤을 땐 실패했다. n = input() m = int(input()) broken_butto..
1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net 간단한 아이디어 문제. 큰 수부터 아래와 같이 표에 채워넣으면 쉽다. arr = [5 3 2 2 0 0] 이란 정보가 주어지면, 먼저 6을 추가한다. 6 5를 추가한다. 6 5 5보다 큰 수가 0개이어야 하므로 0번째 index에 5를 끼어넣자. 5 6 4를 추가한다 5 6 4 3을 추가한다. 5 6 4 3 3보다 큰 수가 2개 이어야 하므로 2번째 index 뒤에 끼워넣자. 5 6 3 4 2를 추가한다. 5 6 3 4 2 2보다 큰 수가 3개이어야 하므..
9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 이 문제를 봤을 때 단순 DP 문제인 것 같아서, 관찰을 해보았다. 스티커를 뗀 부분을 동그라미, 같이 떼어진 부분을 세모라고 한다면(동그라미에 주목) 다음과 같이 i-1번째의 열에서 스티커를 뗀 경우(case1)과 i-1번째에서 스티커를 떼지 않은 경우(case2)로 나누어볼 수 있었다. 이때 i-1번째에서 스티커를 땔 때는 i-1번째 열에서 위에 있는 스티커를 떼었는지 아니면 아래있는 스티커를 떼었는지에 따라 i번째 열에서 뗄 스티커가 결정되고, ..
6064번: 카잉 달력 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. www.acmicpc.net 간단한 구현문제여서 브루트포스로 풀 수 있을 것 같았는데, 1 ≤ M, N ≤ 40,000 이므로 day를 1~MN까지 확인하는 solve() 처럼 풀면 시간초과가 뜬다. 시간초과를 해결하기 위해 다른 색다른 알고리즘이 필요한 것이 아니라 단지 수식적으로 확인해서 day를 특정하면 된다. 그리고 이 과정에서 solve() 풀이에서 처럼 직접 구현하지 않더라도 모듈러 연산으로 성립조건을 간단히 알아낼 수 있다. day1 = mk_1 + x ,day2 = nk_2 + ..
블로그를 시작하기에 앞서 간단히 이 블로그를 시작하게 된 과정?을 간단히 얘기해보려 한다. 사실 이전에 중학교 1학년 겨울방학 때 blogger에서 블로그를 처음으로 시작했었다. 당시 재미로 오답노트, 영재고 입시, 프로그래밍, 동아리 등을 올리기 위해 블로그를 만들었었는데, 3개의 포스팅 이후 귀찮음을 핑계로 블로그 포스팅 또한 계속 미루게 되었고.. 저 블로그는 잊혀갔고 내 기억 속에서도 잊혀졌다... 중학교 때 아두이노 동아리, 우주풍선 프로젝트, 프로그래밍, 머신러닝 공부, 폴리매스, 경시대회 준비부터 영재고 입시, 과학고 입시까지 힘들지만 재밌었고 값진 경험들로 다양하게 중학교 인생을 보냈다. 하지만 그 때 기록으로 남겼었던 것은 대부분 사진과 보고서, 서류 등인데 당시 내 감정, 머릿속에 들어..