안녕하세요. delay100입니다.오랜만에 게시글을 작성해보는데요! 오늘의 주제는 크롤링 만들기. 그 중에서도 네이버 쇼핑 크롤러 만들기입니다 ㅎㅎ. 저는 크롤링은 이번에 처음 만들어보았는데요,크롤러를 만들고 난 후에 이 포스팅을 쓰는 시점에서 크롤링을 생각해보면 html을 한참 바라보는 일이라고 생각합니다.따라서 크롤링의 전반적인 개념은 1. html 태그 구조를 파악하고 2. 해당 태그에 들어있는 정보를 우리쪽으로 긁어온다! 고 생각하면 됩니다.이런 크롤러의 특성상 크롤링을 할 사이트의 태그들이 업데이트 되면 다시 태그 구조를 파악해야하는 번거로움이 존재합니다.... 노가다예요.. 서론은 이쯤 하고 실제 코드를 보면서 크롤링을 해봅시다!*주의! 크롤링 특성 상 실시간 네이버 쇼핑 값을 이용하고 ..
java
1. 문제https://www.acmicpc.net/problem/2615*반례입력1111:11:: ::111출력1111:0011:0000:0000:0000:0000:0000:00000000:0000:0000:0000:0000:0000:0000:01112. 접근 및 해결2-1) 접근1. s[] = 입력 문자열을 ":"로 나누기 2. valid = 나눈 문자열들 중 길이가 1이상인 문자열의 개수를 찾기 3. s[]에서 한 문자열(str)씩 가져오기3-1. 문자열이 ""인 경우=> 비어있는 공간이므로 해당 부분을 8-valid번 "0000"을 추가해야 함(8은 32자리를 4로 나눈 수)3-2. 현재 문자열의 길이가 1~4인 경우=> 문자열을 4자리로 만들어서 sb(StringBuilder)에 추가 4. s..
1. 문제https://www.acmicpc.net/problem/2615 2. 접근 및 해결2-1) 접근현재 도달한 배열의 좌표(i,j)를 기준으로 세로줄, 가로줄, 대각선, 역대각선을 만들어서 오목을 확인했습니다. 세로줄(ㅣ), 가로줄(ㅡ), 역대각선(\)에 대해 index 확인을 그림으로 나타내면 아래와 같습니다. 1. 세로줄(ㅣ) list[i][j] -> list[i+1][j] -> list[i+2][j] ... 로 i값만 +1 변경됩니다. 2. 가로줄(ㅡ) list[i][j] -> list[i][j+1] -> list[i][j+2] ... 로 j값만 +1 변경됩니다. 4. 역대각선(\) list[i][j] -> list[i+1][j+1] -> list[i+2][j+2] ... 로 i, j값이 각..
1. 문제https://www.acmicpc.net/problem/5588처음엔은 백트래킹으로 모든 별의 좌표 중 m개를 추출한 후 비교했는데, 이러면 시간복잡도가 매우 커져서 시간초과가 발생합니다.2. 접근 및 해결2-1) 접근복잡한 연산보다, 해시의 특성을 잘 살리면 풀리는 문제입니다.여기서 쓰인 해시의 특성은 "동등한 객체는 동일한 해시 코드를 가져야 한다"입니다.equals()와 hashCode() 메서드는 객체 간의 동등성을 비교하고, 해시 기반의 자료구조에서 객체를 식별하는 데 사용됩니다.equals(): 두 객체가 동일한지를 비교합니다. 이 메서드를 사용하여 두 객체가 내용적으로 같은지를 확인할 수 있습니다. 즉, 객체의 내용이 같은 경우 true를 반환하고, 다른 경우 false를 반환합니..
1. 문제https://www.acmicpc.net/problem/1193 2. 접근 및 해결2-1) 접근문제를 해결하기 위해 총 4가지를 신경써야합니다.풀이 이해를 쉽게 하기 위해 Input을 8이라 가정, Output인 2/3을 찾아야하는 경우를 알아보겠습니다.아래의 노트를 띄워놓고 설명을 봐주세요! 1. 방문 순서방문 순서는 문제에서 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서라고 나와있습니다.이를 쉽게 다시 생각해보면,1/1,1/2 -> 2/1,3/1 -> 2/2 -> 1/3 의 순서로 파란색 대각선 막대기처럼 계속 이동하는 것을 알 수 있습니다.그리고 우리가 찾아야하는 8번째 값은 이렇게 따라가다보면 2/3임을 알 수 있습니다. 2. 개수개수는 하나의 파란색 ..
1. 문제https://www.acmicpc.net/problem/15683 15683번: 감시스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감www.acmicpc.net2. 접근 및 해결2-1) 접근이 문제를 풀기 위해 한 cctv에서 고려해야 할 것은 종류, 위치, 방향으로 총 3가지 입니다.그런데 종류, 위치는 이미 문제에서 주어지기 때문에 우리는 방향만 정하면 됩니다.종류, 위치(x, y), 방향에 대한 정보 는 cctv 리스트로 관리할겁니다.위치는 x좌표, y좌표가 있으므로 총 4가지의 정보를 담아야 합니다.int[][] cctv = n..
1. 문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 접근 및 해결 2-1) 접근 1. 백트래킹으로 해결 2. 중복 없이 M개를 고른 수열 + 오름차순 -> 현재 나온 숫자가 다음에 나올 숫자보다 크면 출력하지 않음 2-2) 해결 if(cnt==M) { StringBuilder sb2 = new StringBuilder(); for(int i=0; ilist[i+1]) return; // 이 코드를 빼면 15649번 풀이와 같아짐 ..
1. 문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 2. 접근 및 해결 2-1) 접근 1. bfs로 접근합니다. 2. 3차원 배열(isVisited)을 이용합니다. isVisited[부순 벽인지][x][y]로 작성했습니다. -> 부순 벽인지? 0:부수지 않고 옴, 1: 부숴서 옴 부수지 않고 현재 x, y좌표까지 왔는지? 부숴서 현재 x, y좌표까지 왔는지를 나타냅니다. 3. Node는 x, y, cnt(현재까지..
1. 문제 https://www.acmicpc.net/problem/6198 6198번: 옥상 정원 꾸미기 문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으 www.acmicpc.net 이 문제를 풀기 바로 전에 풀었던 탑 문제와 유사하다. https://delay100.tistory.com/108 [BOJ] 백준 2493번: 탑_자바(JAVA) 1. 문제 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 ..
1. 문제 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 2. 접근 및 해결 2-1) 접근 Stack이 pop되면서 변경되는 index를 처리하기 위해 Top이라는 객체를 만들어줬습니다. 이렇게 객체로 만들지 않으면, 스택이 pop되면서 현재 index위치를 잃어버리게 됩니다. 이 객체를 만들기 전에는 이중 for문으로 처리했었는데, 그럼 시간초과에서 벗어날 수가 없어서 채용했습니다.. class Top { int index; int hei..