문제 문제로 이동 Problem - A - Codeforces codeforces.com 목차 문제 설명 두 수가 주어진다. 각 숫자의 위치를 바꾸는 여러가지 경우의 수 중 첫번째 수가 두번째 수보다 더 큰 확률이 높다면 RED를, 두번째 수가 첫번째 수보다 더 큰 확률이 높다면 BLUE를 같다면 EQUAL을 출력하라. 예시 위 입력 값으로 나오는 경우의 수는 아래와 같다. 1,2,3 순으로 나열 : 314>159 RED 1,3,2 순으로 나열 : 341>195 RED 2,1,3 순으로 나열 : 1342,3,1 순으로 나열 : 1433,1,2 순으로 나열 : 4313,2,1 순으로 나열 : 413RED 2, BLUE 4로 BLUE가 출력된다. 규칙 굳이 모든 수를 바꿔가며 비교할 필요가 없다. RED :..
문제로 이동 목차 문제 설명 구간합 문제다. 이 게시물에서는 세그먼트 트리를 이용해 해결한다. 충분히 단순 반복문으로 해결할 수 있지만 그런 경우, 구간 합을 구하는데 O(n)이 걸린다. 이런 과정이 M번 반복된다면 O(MN)이 된다. 구간합 뿐만 아니라 특정 위치의 수를 변경시키는 기능도 있다. 해당 위치의 수가 바뀌면 그보다 큰 위치의 합도 모두 변경해야 하므로 TLE가 날 수 밖에 없다. 세그먼트 트리를 이용하면 O(Mlog(N))으로 해결할 수 있다. 소스 코드 소스코드 import sys input = sys.stdin.readline tree = list() nodes = list() #ChangeIdx : 수정할 인덱스, ChangeNum : 수정할 숫자 def update(start, en..
문제 문제로 이동 Problem - B - Codeforces codeforces.com 문제 설명 입력되는 수열을 A, 새로 생성 해야하는 수열을 B라고 두자. 위와 같은 조건이 주어진다. 위의 조건을 만족하는 B를 출력해야 한다. 이게 어떤 의미인지 예시에서 알아보자. 예시 S : A배열의 총합 조건 : 같은 인덱스 끼리의 차이(절대값)의 합 * 2가 S보다 작거나 같아야 한다. B의 총 합이 A의 총 합(S)보다 작다면 성립이 된다. 하지만 문제설명에서 언급했듯이 주의해야 할 점이 있다. 주의해야할 점 1. B_i와 B_i+1는 서로 나눠지는 관계다. 즉, 한쪽은 약수 반대쪽은 배수가 되어야 한다. 이 조건을 만족하는 수는 바로 2의 제곱수이다. 규칙 A_i 보다 작은 2의 제곱수 B_i를 만들면 ..
문제로 이동 Problem - A - Codeforces codeforces.com 목차 문제 설명 몬스터 세 마리의 체력이 주어진다. 이 몬스터를 죽이기 위해서(체력을 모두 0으로 만든다) 공격을 해야한다. 공격은 단일공격 6회, 전체공격 1회를 반복할 수 있다. 즉, 1~6회 공격은 한 마리에게만 데미지가 들어가고, 7회째 공격은 세 몬스터에게 데미지가 들어간다. 몬스터가 모두 동시에 죽는다면 YES를 그렇지 않으면 NO를 출력한다. 예시 설명 위 그림처럼 3, 2, 4라는 체력을 가진 몬스터가 주어졌다고 생각해보자. 최종적으로 7회차 공격(전체 공격)때 세 몬스터의 체력이 동시에 0이 되면서 죽이기에 성공한다. 출력은 YES가 될 것이다. 주의해야할 점 위 예시는 7회차만에 공격이 끝난다. 하지만 ..
문제로 이동 5676번: 음주 코딩 각 테스트 케이스마다 곱셈 명령의 결과를 한 줄에 모두 출력하면 된다. 출력하는 i번째 문자는 i번째 곱셈 명령의 결과이다. 양수인 경우에는 +, 음수인 경우에는 -, 영인 경우에는 0을 출력한다. www.acmicpc.net 목차 너무도 흔한 세그먼트 트리 문제이다. 하지만, 주의해야 할 부분이 몇 가지 있다. 주의해야 할 점 1. 구간곱 문제이므로 수가 커진다. 하지만, 이 문제에서는 음,양,0만 판별하면 되므로 모든 수를 -1, 0, 1로 바꿔준다. 2. 문제에 TC(테스트 케이스)가 주어지지 않았다. C++에선 while scanf 사용이 가능하지만 Python3에서는 다른 방법을 사용한다. TC가 주어지지 않는 경우 Python3에서는 Try - Except ..
ETRI 지원은 처음이 아니다. 두번째 시도 끝에 합격을 했고, 처음과 지원했던 부서는 달랐다. 후기를 적어야지 생각만 하다가 인턴이 종료된지 2개월 남짓한 시점에 드디어 쓴다. 지원 아마 2019년부터 100% 온라인 접수로 변경된 것으로 알고있다. 3학년 2학기에 처음 동계 연구 연수생 지원을 했으나, 그렇다 할 프로젝트도 내세울 만한 스펙도 없었기에 기대는 안했다. 결과는 역시나 탈락이었다. 2020년 하계 연구 연수생 접수 기간엔 부서를 바꿔서 지원을 했다. 정말 기대를 전혀 안했다. 우선, 나는 해당 부서와 전혀 연관이 없는 정보보안 전공이다. 해당 부서는 개발 관련 부서였고 아마 프리캡스톤이나 학부 필수 과목에서 진행했던 팀 프로젝트가 해당 부서의 업무와 비슷한 면이 있지 않았나 생각이 든다...
해당 게시글은 다크모드에 최적화 되어 있지 않습니다. 표준 템플릿 라이브러리 STL (Standard Tamplate Library) 중 컨테이너 항목에 속하는 vector, 항상 효율적인 것은 아닙니다. C++ 자료구조 컨테이너 세 가지를 살펴보시고 적절한 곳에 사용하시기 바랍니다. ※ 해당 포스트에서는 각 컨테이너에 대해 자세히는 다루지 않습니다. 목차 Vector #include [ 특징 & 장점 ] 흔히 사용하는 vector는 일반 배열처럼 연속적인 메모리 공간에 저장합니다. 그렇기에 iterator 뿐 아니라 index로도 접근이 가능합니다. 또한, 동적으로 확장/축소가 가능한 Dynamic Arrary로 구현되어 있습니다. 연속적인 메모리 공간에 저장되기에 deque, list에 비해서 개별 ..
Educational Codeforces Round 88 (Rated for Div. 2) A - Berland Poker 코드포스 A 풀이 codeforces.com/contest/1359/problem/A Problem - A - Codeforces codeforces.com 문제 설명 정해진 룰에 따라 카드 게임을 한다. 총 카드의 수 n 조커카드의 수 m 게임하는 인원수 k 즉, 한 사람당 소지할 수 있는 최대 카드의 수는 n/k가 된다. 조커 카드를 가장 많이 갖고 있는 사람의 조커 카드 수와 두번째로 많이 갖고 있는 사람의 조커 카드 수를 빼준다. 이 조건을 만족했을때 최대 값은 몇인가? 문제 풀이 문제를 이해 했다면, 첫번째 사람이 가져갈 수 있는 조커 카드의 최대 수(x라는 변수)를 먼저 ..
Educational Codeforces Round 88 (Rated for Div. 2) B - New Theatre Square 코드포스 풀이 https://codeforces.com/contest/1359/problem/B Problem - B - Codeforces codeforces.com 어? BFS? DFS?.. B번 문제에 벌써 나온다고??? 대회 종료 후에 소스를 엎고 5분만에 해결했다. 테스트케이스 t가 주어지고, n개의 열, m개의 행, 빈 칸 하나의 값인 x, 빈 칸 두개의 값인 y가 주어진다. . . . 위 두가지 경우처럼 . 으로만 찍힌 칸만 계산이 가능하며 * 별이 찍힌 칸은 계산할 수 없다.(무시한다) 3 3 3 7 . . * * . . . * ..
코드포스 634회 Div2 A번 문제풀이 https://codeforces.com/contest/1355/problem/A Problem - A - Codeforces codeforces.com 아래의 식을 만족한다. an+1 = an + minDigit(an) * maxDigit(an) 케이스의 수 t와 정수 a, k가 입력된다. 1) a=1, k=4 일 때 ak = 42 2) a=487, k=1 일 때 ak = 487 3) a=487, k=2 일 때 ak = 519 4) a=487, k=7 일 때 ak = 628 a1이 1일 때 k를 계속 증가시켜보면 1, 2, 6, 42, 50, 50, 50... 계속해서 50이 반복된다. k an+1 ak 1 - 1 2 a2 = a1 + min(a1) * max(..