PS/Codeforces 3

Codeforces Round 932 (Div. 2)

A. Entertainment in MAC 접근 방식 연산 횟수와 string이 주어질 때, 두가지 연산 중 하나를 주어진 연산 횟수 만큼 하게 된다. 연산 1. 주어진 string과 주어진 string의 reverse 붙이기 연산 2. 현재까지 만들어진 string 뒤집기 이 때, 모든 연산이 완료된 후 사전 순으로 나열했을 가장 앞에 있을 string을 찾는 문제이다. 무작정 string을 붙이면 이전에 만들어진 문장보다 사전순으로 뒤로 가기 때문에 좋은 방식이 아니다. 만약 reverse한 string을 한번 붙이게 되면 해당 string은 palindrome이다. Solution 우선 현재 string과 reverse string을 각각 str1, str2라 명명해보자. str1 str2 우선 s..

PS/Codeforces 2024.03.09

Codeforces Round 930 (Div. 2)

A. Shuffle Party (링크) 접근 방식 { 1, 2, ... , n} 인 수열이 주어졌을 때, swap(i)를 i=1 to i =n을 했을 때, 1의 위치를 구하는 문제이다. 우선 swap(k)의 결과를 나열해보자. k = 5 까지 나열해보면 - swap(1) = None - swap(2) = 1 - swap(3) = 1 - swap(4) = 2 - swap(5) = 1 Solution 잘 보면 1은 swap(2)에 의해 2와 위치를 바꾸게 되고 이후에 swap(4)에 의해 4와 위치가 바뀌게 된다. 사실 여기서 감으로 1은 현재 위치 * 2를 계속 한다는 것을 알 수 있는데, 엄밀하게 한번 생각해보자. 어떤 수 swap(k) = 2^n 인 k의 최소 값이 2^(n+1)임을 확인하면 된다. x..

PS/Codeforces 2024.03.09

Codeforces Round 931 (Div. 2)

A. Too Min Too Max(링크) 접근 방법 수식적으로 증명하는 방법이 있으나, A인 만큼 빠르게 직관으로 접근해보았다. 4개의 숫자, a, b, c, d가 있다고 하자. 이 때, 차례로 이웃한 숫자와의 차이가 가장 크게 만들면 된다. 그렇다면 a, b, c, d를 가장 큰 수, 가장 작은 수를 반복해서 넣으면 된다는 생각으로 이어진다. Solution 수열을 정렬한 후 a, b, c, d를 차례로 (가장 큰 수) (가장 작은 수) (두번째로 큰 수) (두번째로 작은 수)로 하여 문제에서 말하는 수식을 풀면 된다. import sys input = sys.stdin.readline sys.setrecursionlimit(int(1e9)) T = int(input()) while T: T -= 1 ..

PS/Codeforces 2024.03.06