본문 바로가기

전체 글

(34)
백준(boj) 14890_경사로 (파이썬, c++) https://www.acmicpc.net/problem/14890풀이가로방향, 세로방향 총 2N개의 방향을 돌면서 잘 통과하면 1, 통과하지 못하면 0을 반환해서 개수를 세어준다. 변수 k를 이용했는데, k는 앞쪽에 경사로를 만들 수 있는 개수라고 생각하면 쉽다. 만약 길을 가다가 뒤에가 더 클 때(diff==1), k가 l보다 작다면 앞쪽에 만들 수 있는 개수가 l보다 작으므로 경사로 건설이 불가능하다. 따라서 0을 반환한다. 그렇지 않다면, 새로운 높이에 올라왔으므로 k를 다시 초기화 해준다. 만약 뒤에가 더 작다면(diff==-1) 일단 k가 0보다 크거나 같은지 확인해주어서 이 곳에 만들 수 있는지를 살펴본다. 만약 이 곳에 경사로를 놓을 수 있다면, k를 -l의 길이로 만들어준다(경사로 만들 ..
백준(boj) 14891_톱니바퀴 (파이썬, c++) https://www.acmicpc.net/problem/14891풀이1, 2, 3, 4번 4개의 톱니바퀴가 있고, 각각 8개의 극이 있다. n번 톱니 바퀴를 시계 or 반시계 방향으로 돌릴 때, 맞물려 있는 톱니바퀴의 극이 반대 극이면 반대 방향으로 돌려준다. 크기가 4인 배열을 이용해서 시계로 돌아야하면 1을, 반시계로 돌아야하면 -1을, 그대로 이면 0을 표시해서 톱니바퀴를 돌려준다.python3from sys import* input = lambda:stdin.readline().strip() arr=[list(input())for _ in range(4)] #12시 방향부터 시계방향 순서로, N극은0, S극은1 ​ def turn(a,b): visit[a]=b if a-1>=0 and arr[a..
백준(boj) 14889_스타트와 링크 (파이썬, c++) https://www.acmicpc.net/problem/14889풀이짝수인 n명이 있는데 이들을 반으로 팀을 가른다(A팀, B팀) 그 뒤, 두명씩 짝지었을때 능력치는 어떤지 모두 더해주고 A팀 능력치와 B팀 능력치의 차이가 최소가 되는 값을 찾아준다.player 배열을 만들어서 1 or 0을 부여해준다. 1은 A팀이고 0은 B팀이다.cnt가 반절(n/2)을 넘어가면 팀설정이 잘못되었다. 끝내버린다.pos가 마지막(n) 까지 탐색을 완료하였고, cnt가 반절(n/2)을 선택했으면 둘 씩 짝지어서 A팀, B팀 각각 계산을 해준다. 계산 해준 A팀과 B팀 능력치의 차이를 구해 반환한다.python3from sys import* input = stdin.readline def cal(): teamA, team..
백준(boj) 15683_감시 (파이썬, c++) https://www.acmicpc.net/problem/15683풀이감시하는 곳을 완전탐색 하면 된다. 이 때 비트마스크와 집합을 사용해서 좀 더 이쁘게 구현 가능하다.우선 solve()함수부터 살펴보면, 이 함수는 완전탐색을 하기 위한 함수이다. pos로 현재 위치를 나타내고, res로 0인 곳을 얼마나 살폈는지를 나타낸다.(res를 사용하지 않고 base case 부분에 2중포문으로 a를 다 살펴보며 0이 몇개인가를 찾아도 되지만, 시간 절약을 위해 처음에 0의 개수를 세어놓고, 총 0의 개수에서 감시하는 cctv 개수를 빼줌으로써 남은 0의 개수를 구했다.)pos가 모든 cctv를 살펴보면 끝이나게 base case를 잡고, b라는 지역변수에 a의 값을 복사해줬다.그렇게 x좌표, y좌표, 몇번의 ..
백준(boj) 14500_테트로미노 (파이썬, c++) https://www.acmicpc.net/problem/14500풀이'ㅗ' 모양만 제외하면 나머지 4개의 모양은 뒤집고 돌리고 하다 보면 상하좌우 4방향으로 이어진 dfs로 모든 경우를 찾을 수 있다. (이전 방문한 곳으로 다시 가서 무한루프만 돌지 않게 해준다면 bfs로도 구현이 가능하다. 파이썬 코드는 둘 다 첨부) 'ㅗ' 모양은 따로 처리해주는데, 구하려고 하는 곳의 상하좌우 4개를 더하고 최솟값을 빼준다. 단 이때, 주위 블럭이 3개 밖에 없을 경우는 3개를 더해주기만 한다. (모서리에 일자로 세 개 연속된 게 답일 수도 있으므로) python3(PyPy3 제출)#dfs 구현 from sys import* from collections import* input = stdin.readline de..
백준(boj) 14503_로봇청소기 (파이썬, c++) https://www.acmicpc.net/problem/14503풀이주어진 문제대로 잘 따라 만들면 되는 시뮬레이션 문제이다.4방향을 탐색하면서 청소할 곳이 있으면 그곳에 가서 청소한다. 청소한 곳은 2로 표시해둔다. 4방향 모두 청소할 곳이 없다면, 뒤로 이동한다. 만약 뒤가 벽이면 끝내고, 벽이 아니라면 그곳으로 가서 다시 4방향을 탐색한다.python3from sys import* from collections import* input = stdin.readline n,m=map(int,input().split()) x, y, d = map(int,input().split()) a=[list(map(int,input().split()))for _ in range(n)] dd=[(-1,0),(0,1..
백준(boj) 14501_퇴사 (파이썬, c++) https://www.acmicpc.net/problem/14501풀이완전탐색 한다. pos가 현재 날짜이고, res가 총 이익 값이다.base case는 pos가 n일 때 res값을 반환한다. pos가 n을 넘어가면 퇴사한 이후이므로 조건을 만족하지 못한다. 따라서 0을 반환한다. 이 문제의 경우 해당 날짜의 상담을 선택하거나 선택하지 않거나 두 가지의 경우밖에 없는데,만약 선택을 한다면, 그 날짜에 있는 상담이 걸리는 시간을 추가해주고, 얻을 수 있는 이익도 추가해준다. (solve(pos+a[pos][0], res+a[pos][1]))선택을 하지 않는다면, 이익은 그대로 두고 바로 다음 스케줄을 확인해주어야 한다. (solve(pos+1, res))python3from sys import* inpu..
백준(boj) 14499_주사위 굴리기 (파이썬, c++) https://www.acmicpc.net/problem/14499풀이큐빙문제의 순한맛 버전이다.정육각형을 하나 그려놓고 위에는0, 아래는 5, 앞은 1, 뒤는 4, 왼쪽은 3, 오른쪽은 2를 적는다.이 정육각형을 굴렸을 때 어떤 곳으로 변하게 될지 테이블을 만들어서 풀어준다.만약 오른쪽으로 굴리면,위에 있는 칸(0)은 왼쪽 칸(3)이 되고앞에 있는 칸(1)은 그대로 앞(1),오른쪽에 있는 칸(2)은 위(0),왼쪽에 있는 칸(3)은 아래(5),뒤에 있는 칸(4)은 그대로 뒤(4),아래에 있는 칸(5)은 오른쪽 칸(2)이 된다.이를 테이블로 만들면 [3, 1, 0, 5, 4, 2]이고, 나머지 L, U, D도 각각의 위치가 어디로 변하는지 생각해서 만들면 된다.움직이는 방향들이 주어지므로 각각의 움직임에 ..