전체 보기
[24번(old)] Write-Up
처음 들어가게 되면 이런 화면이 보입니다. Wrong IP! 라는 문구가 왠지 저한테 IP를 바꿔야 한다고 말하고 있는 것 같군요. 그래서 일단 view-source를 통해 소스를 보기로 했습니다. 여기서 주목해야 할 점은 바로 extract(\$_SERVER), extract(\$_COOKIE) 입니다. php에서 extract() 함수는 배열 속의 키 값을 변수화 시켜줍니다. REMOTE_ADDR, HTTP_USER_AGENT 같은 변수들이 변수화되었다는 것을 알 수 있습니다. (저는 나중에 안 사실이지만, \$_SERVER보다 \$_COOKIE가 나중에 선언되었기 때문에 cookie를 통해 조작이 가능한 것이었습니다.) 풀이 방법을 먼저 말해버린 것 같지만 아무튼 cookie를 조작해야 한다는 것을..
[1번(old)] Write-Up
webhacking.kr 사이트가 개선되기 이전에 가입했다가 손 놓고 있었다가 이번에 본격적으로 해킹을 공부하게 될 기회가 생겨 1번부터 차근차근 풀어보기로 하였습니다. 들어가자마자 이런 게 보이는군요. view-source를 클릭해 어떻게 구성이 되어있는지 알아보도록 하겠습니다. 여기서 저희가 주목해야 할 점은 이 php 소스가 언제 solve(1);이라는 함수를 실행시켜주느냐입니다. 역시나 눈에 띄는 건 COOKIE라는 이름들이고, 실제로 SetCookie라는 함수를 통해 cookie를 세팅해주고 있는 모습입니다. 여기서 가장 쉽게 생각할 수 있는 것은 $5 \lt $user_lv $\lt 6$이 되어야 한다는 것입니다. 그렇다면 저희가 잘 아는 데이터 타입이 하나 있죠. 바로 '실수(Real Num..
[2578번] 빙고
백준 2578번: 빙고 2578번: 빙고 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다. www.acmicpc.net 이 문제는 조금 생각해야 할 게 필요합니다. 제가 틀렸던 과정을 최대한 비슷하게 밟아보겠습니다. 처음에는 단순하게 5X5 크기의 빙고판이니 '브루트 포스' 기법으로 풀 수 있겠다는 확신이 들었습니다. 그러니 대각선과 가로, 세로줄을 검사하여 빙고인지 검사할 함수와 빙고의 개수를 세어주기만 하면 된다고 생각했습니다..
[2156번] 포도주 시식
백준 2156번: 포도주 시식 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고 www.acmicpc.net [해당 포스팅]과 완전히 같습니다. 달라 보이신다고요? 아닙니다. 잘 살펴봅시다. 위의 포스팅에서 소개된 문제는 "계단 오르기" 문제인데요. 두 문제의 조건 차이는 단 ..
[2579번] 계단 오르기
백준 2579번: 계단 오르기 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 www.acmicpc.net 계단을 오르는데 조건을 만족시키며 지나가는 계단 값들의 합 중 최댓값을 구하는 문제입니다. DP를 이용하여 풀어야하는 느낌이 듭니다. 그래서 아이디어를 생각해봐야 합니다. 현재 밟고 있는 계..
[5582번] 공통 부분 문자열
백준 5582번: 공통 부분 문자열 5582번: 공통 부분 문자열 문제 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들어, 문자열 ABRACADABRA의 부분 문자열은 ABRA, RAC, D, ACADABRA, ABRACADABRA, 빈 문자열 등이다. 하지만, ABRC, RAA, BA, K는 부분 문자열이 아니다. 두 문자열 ABRACADABRA와 ECADADABRBCR www.acmicpc.net LCS 알고리즘에 대해 아시나요? 혹시 모르신다면 [여기]를 참고하시고 다시 와 주세요. 아무튼 이 문제는 LCS 문제와는 약간의 차이가 있습니다. 그때는 각..
[9252번] LCS 2
백준 9252번: LCS 2 9252번: LCS 2 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net [이전 포스팅] 글의 다음 단계라고 할 수 있습니다. 방법은 간단합니다. 이전에는 길이만을 출력하게 했다면, 이번에는 역추적을 통한 검사를 추가로 포함시켜주면 됩니다. 역추적은 만들어진 DP table에서 길이 값이 같거나 하나 줄어드는 방향으로 움직이며 table 기준으로 아래에서 출발하여 위쪽으로 움직일 때마다 그 문자를 저장해주면 됩니다. 그 후에는 출력만 해주면 되겠죠. 기본적인..
[9251번] LCS
백준 9251번: LCS 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net "LCS(Longest Common Subsequence, 최장 공통부분 수열) 문제"입니다. DP(Dynamic Programming)으로 풀 수 있는 유명한 문제 중 하나입니다. 사실 이 문제에 대한 알고리즘 설명을 드리고 싶지만 저보다 잘 설명하시고 자료도 많으신 블로거 분들이 많이 계셔서 그중 제가 참고했던 [블로그 하나]를 소개하겠습니다. ㅎㅎ 이 문제에서 얻어갈 것은 LCS 알고리즘..
[5532번] 방학 숙제
백준 5532번: 방학 숙제 5532번: 방학 숙제 문제 상근이는 초등학교에 다닐 때, 방학 숙제를 남들보다 먼저 미리 하고 남은 기간을 놀았다. 방학 숙제는 수학과 국어 문제 풀기이다. 방학은 총 L일이다. 수학은 총 B페이지, 국어는 총 A페이지를 풀어야 한다. 상근이는 하루에 국어를 최대 C페이지, 수학을 최대 D페이지 풀 수 있다. 상근이가 겨울 방학동안 숙제를 하지 않고 놀 수 있는 최대 날의 수를 구하는 프로그램을 작성하시오. 입력 한 줄에 하나씩 총 다섯 줄에 걸쳐 L, A, B, C, D가 www.acmicpc.net '나누기 + 나머지'를 다룰 수 있는지 묻는 문제입니다. 그다지 어렵지 않으니 딱히 설명을 드릴 것이 없군요.. 아쉽네요. [소스 보기]