PS 119

[백준 BOJ][세그먼트 트리] 2336 굉장한 학생

2336_굉장한 학생 링크 https://www.acmicpc.net/problem/2336 풀이 시험을 3번 치룹니다. 어떤 학생보다 대단한 학생이 없어야 그 학생이 굉장한 학생입니다. 학생은 1~N 순서대로 번호가 부여되기 때문에, 첫 번째 등수를 기준으로 정렬을 합니다. 그럼 정렬을 한 상태에서 i번째 학생이 굉장하려면 1~i-1번째 학생 중에 대단한 학생을 찾으면 됩니다. 왜냐하면 i+1~N번째 학생은 이미 첫 번째 시험에서 밀렸기 때문이죠. 그럼 2번째 등수와 3번째 등수가 남았는데, 2번째 등수를 세그먼트 트리의 인덱스로 놓고 3번째 등수를 값으로 저장하게 합니다. 그 다음 1 ~ 2번째 등수 - 1에서 값의 최솟값을 뽑으면 나보다 2번째 등수가 높은 사람들 중에 3번째 등수의 최솟값이 나옵니..

PS/BOJ 2018.12.01

[백준 BOJ] 16431 베시와 데이지

16431_베시와 데이지 링크 https://www.acmicpc.net/problem/16431 풀이 베시는 대각선으로도 이동할 수 있습니다. 베시가 존과 가로로 떨어져 있는 만큼을 a, 세로로 떨어져 있는 만큼을 b라고 했을 때, 존이 이동하는 시간은 max(a, b) – min(a, b) + min(a, b) = max(a, b)입니다. 가로와 세로 중 더 적은 부분은 대각선으로 이동하면서 상쇄됩니다. 데이지는 가로와 세로로만 이동하니까, 똑같이 뒀을 때 a+b입니다. 베시 = max(a,b) 데이지 = a+b 둘 중 더 작은 소를 출력하면 됩니다. 같으면 tie를 출력합니다. 코드

PS/BOJ 2018.11.28

[백준 BOJ][DP] 16507 어두운 건 무서워

16507_어두운 건 무서워 링크 https://www.acmicpc.net/problem/16507 풀이 http://jaemin8852.tistory.com/194 - 2차원 배열의 합 이 문제와 유사한 방법으로 풀 수 있습니다. (1,1)부터 (n,m)까지의 합을 구해 DP[n][m]에 저장해 놓고, 그걸 활용해 구간의 합을 구할 수 있죠. 구간의 합을 구한 다음, 가로와 세로의 길이 곱으로 나누어 출력하면 됩니다. 합이 1000*1000*10000까지 나오기 때문에 배열의 자료형은 long long으로 해야 합니다. 코드

PS/BOJ 2018.11.27

[백준 BOJ] 16504 종이접기

16504_종이접기 링크 https://www.acmicpc.net/problem/16504 풀이 종이를 계속 접어서 겹치는 부분을 더해서 마지막 남는 수를 출력하는 문제입니다. 조건을 보시면 2의 m승으로 입력이 주어집니다. 반으로 계속 접어서 하나가 남는다는 걸 성립하게 해주는 조건이죠. n제곱번 돌리면서 들어오는 정수 K를 계속 더해주면 됩니다. 최대 1024*1024*100000이니 long long을 써야합니다. 코드

PS/BOJ 2018.11.26

[백준 BOJ] 1138 한 줄로 서기

1138_한 줄로 서기 링크 https://www.acmicpc.net/problem/1138 풀이 자기가 줄을 서는 사람의 입장이 되봅시다. 작은 사람부터 세운다고 생각하면 그 이후에 들어오는 사람들은 다 현재 사람보다 큰 사람이기 때문에 현재 줄에 있는 빈 자리들은 모두 큰 사람들의 자리라고 생각하면 됩니다. i가 현재 줄 세울 사람의 키, j가 그 사람이 설 자리, cnt가 자신보다 큰 사람(즉, 빈자리) 카운트 하는 변수, tmp가 왼쪽에 자기보다 키가 큰 사람이 몇 명 있었는지를 나타냅니다. i의 키를 가진 사람이 j번째 자리를 봤을 때, 사람이 있는 경우에는 그 사람이 나보다 작기 때문에 cnt는 증가하지 않고, j만 증가합니다. 즉, 자리만 이동한다는 얘기죠. 그리고 if로 cnt와 tmp가..

PS/BOJ 2018.11.25
반응형