implementation 111

[ BOJ ] 18917 : 수열과 쿼리 38 ( SILVER 3 ) / Python

>> 문제 바로가기 (https://www.acmicpc.net/problem/18917) 문제 처음에 0이 하나 포함되어있는 배열 A가 있다. 이때, 다음 쿼리를 수행해야 한다. 1 x: A의 가장 뒤에 x를 추가한다. 2 x: A에서 x를 제거한다. A에 x가 두 개 이상 있는 경우에는 가장 앞에 있는 하나만 제거한다. 항상 A에 x가 있는 쿼리만 주어진다. 3: A에 포함된 모든 원소를 더한 값을 출력한다. 4: A에 포함된 모든 원소를 XOR한 값을 출력한다. 입력 첫째 줄에는 쿼리의 개수 M이 주어진다. 둘째 줄부터 다음 M 개의 줄에 쿼리가 주어진다. 출력 3번 혹은 4번 쿼리가 등장할 때마다, 답을 한 줄에 하나씩 출력한다. 풀이 과정 합을 누적시키는 변수 하나와, XOR을 누적시키는 변수 ..

(예전 글)/BOJ 2024.02.06

[ BOJ ] 21922 : 학부 연구생 민상 ( GOLD 5 ) / Python

>> 문제 바로가기 (https://www.acmicpc.net/problem/21922) 문제 학부 연구생으로 새로 연구실에 들어온 민상이는 사용할 자리를 정하려고 한다. 연구실은 격자 모양으로 되어있고 에어컨에서 바람이 상,하,좌,우 4방향으로 분다. 물론 에어컨이 위치한 곳에도 바람이 분다. 민상이는 더위를 많이 타서 에어컨 바람이 지나가는 곳 중 하나를 선택하여 앉으려고 한다. 연구실에는 다양한 물건들이 있어 바람의 방향을 바꾼다. 연구실에 있는 물건의 종류는 총 4가지가 있다. 아래 화살표의 의미는 바람이 각 물건에서 바람의 이동을 표시한 것이다. 연구실 어디든 민상이가 앉을 수 있는 자리이다. 즉 에어컨이 위치한 자리와 물건이 있는 자리 모두 앉을 수 있다. 민상이가 원하는 자리는 몇 개 있는..

(예전 글)/BOJ 2024.02.04

[ BOJ ] 2553 : 마지막 팩토리얼 수 ( SILVER 2 ) / Python

>> 문제 바로가기 (https://www.acmicpc.net/problem/2553) 문제 N!의 값을 계산한 후에, 0이 아닌 가장 낮은 자리 수를 구하시오. 예를 들어, 4! = 24 이기 때문에, 0이 아닌 가장 낮은 자리 수는 4이다. 또, 5! = 120이기 때문에, 0이 아닌 가장 낮은 자리 수는 2 이다. 입력 첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다. 출력 첫째 줄에 N!의 0이 아닌 마지막 자리수를 출력한다. 풀이 과정 N! 을 구하기 위해 1부터 N까지 계속 곱하면서, 가장 낮은 자리 수가 0일 때 이를 모듈러 연산으로 계속 지워줌으로써 0이 아닌 마지막 자리수를 구한다. 계산값이 유지되도록 충분히 큰 수로 나눈 나머지를 유지해주었다. import s..

(예전 글)/BOJ 2024.02.03

[ BOJ ] 17829 : 222-풀링 ( SILVER 2 ) / Python

>> 문제 바로가기 (https://www.acmicpc.net/problem/17829) 문제 조기 졸업을 꿈꾸는 종욱이는 요즘 핫한 딥러닝을 공부하던 중, 이미지 처리에 흔히 쓰이는 합성곱 신경망(Convolutional Neural Network, CNN)의 풀링 연산에 영감을 받아 자신만의 풀링을 만들고 이를 222-풀링이라 부르기로 했다. 다음은 8×8 행렬이 주어졌다고 가정했을 때 222-풀링을 1회 적용하는 과정을 설명한 것이다 행렬을 2×2 정사각형으로 나눈다. 각 정사각형에서 2번째로 큰 수만 남긴다. 여기서 2번째로 큰 수란, 정사각형의 네 원소를 크기순으로 a4 ≤ a3 ≤ a2 ≤ a1 라 했을 때, 원소 a2를 뜻한다. 2번 과정에 의해 행렬의 크기가 줄어들게 된다. 종욱이는 N×..

(예전 글)/BOJ 2024.02.03

[ BOJ ] 23350 : K 물류창고 ( SILVER 2 ) / Python

문제 K사의 물류창고를 운영하는 도커 씨는 오늘 발주를 처리하기 위해 N 개의 컨테이너들을 적재해야 한다. 도커씨는 이 일을 하나의 로봇을 이용해 처리하려 한다. 로봇은 컨테이너를 옮길 때마다 컨테이너의 무게만큼 비용을 발생시킨다. 컨테이너마다 우선순위가 있는데 우선순위는 1 이상 M 이하의 정수로 표현된다. 우선순위가 1에 가까울 수록 높은 우선순위를 가지고, M에 가까울 수록 낮은 우선순위를 가진다. M개의 각 우선순위에 대하여 해당 우선순위를 갖는 컨테이너가 적어도 하나 존재한다. 컨테이너는 레일을 통해 하나씩 오고, 우선순위가 낮은 컨테이너를 먼저 적재한다. 낮은 우선순위의 컨테이너들이 모두 적재되지 않은 상태에서 높은 우선순위의 컨테이너가 온다면 레일의 처음으로 보낸다. 레일의 처음으로 보낼 때..

(예전 글)/BOJ 2024.02.01

[ BOJ ] 5547 : 일루미네이션 ( GOLD 4 ) / Python

문제 부유한 집안의 상속자 상근이네 집은 그림과 같이 1미터의 정육각형이 붙어있는 상태이다. 크리스마스가 다가오기 때문에, 여자친구에게 잘 보이기 위해 상근이는 건물의 벽면을 조명으로 장식하려고 한다. 외부에 보이지 않는 부분에 조명을 장식하는 것은 낭비라고 생각했기 때문에, 밖에서 보이는 부분만 장식하려고 한다. 위의 그림은 상공에서 본 상근이네 집의 건물 배치이다. 정육각형 안의 숫자는 좌표를 나타낸다. 여기서 회색 정육각형은 건물의 위치이고, 흰색은 건물이 없는 곳이다. 위에서 붉은 색 선으로 표시된 부분이 밖에서 보이는 벽이고, 이 벽에 조명을 장식할 것이다. 벽의 총 길이는 64미터이다. 상근이네 집의 건물 위치 지도가 주어졌을 때, 조명을 장식할 벽면의 길이의 합을 구하는 프로그램을 작성하시오..

(예전 글)/BOJ 2024.02.01

[ BOJ ] 17779 : 게리맨더링 2 ( GOLD 3 ) / Python

문제 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다. 재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다섯 선거구 중 하나에 포함되어야 한다. 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. 구역 A에서 인접한 구역을 통해서 구역 B로 갈 수 있을 때, 두 구역은 연결되어 있다고 한다. 중간에..

(예전 글)/BOJ 2024.01.31

[ AtCoder ] Boot camp for Beginners - ( ABC 048 ) B - Between a and b ...

https://atcoder.jp/contests/abc048/tasks/abc048_b B - Between a and b ... AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp a 와 b 사이에 있는 정수 중 x로 나누어 떨어지는 수를 찾기 위해, b를 x로 나눈 몫에서 a를 x로 나눈 몫을 뺀다. ( a가 x로 나누어 떨어지면 이를 포함해야 하므로, a가 x로 나누어 떨어지면 결과값에 1을 더한다. ) import sys input = sys.stdin.readline a, b, x = map(int, input()..

[ AtCoder ] Boot camp for Beginners - ( AGC 029 ) A - Irreversible operation

https://atcoder.jp/contests/agc029/tasks/agc029_a A - Irreversible operation AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp s[i] 번째 문자가 W면, W를 왼쪽으로 가져가기 위해 i 번 만큼 flip 해야 한다. 이전에 W가 k번 나왔다면, i - k 번 만큼 flip 해야 한다. import sys input = sys.stdin.readline s = input().rstrip() result = 0 cnt = 0 for i in range(len(s))..

[ AtCoder ] Boot camp for Beginners - ( ABC 156 ) C - Rally

https://atcoder.jp/contests/abc156/tasks/abc156_c C - Rally AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp 1부터 100까지 해당 좌표에서 미팅을 열었을 때의 포인트를 전부 계산하여 최소 포인트를 찾는다. import sys input = sys.stdin.readline n = int(input().rstrip()) arr = list(map(int, input().rstrip().split())) result = -1 for i in range(1, 101): now =..