전체 글 405

[백준 2468번] 안전 영역 - java

문제 설명 1. 맵의 크기 n과 각각의 지역을 입력받는다. 2. 건물의 높이들에 대해 비가 아예 안오거나 건물만큼 온다. 3. 비가 건물의 높이만큼 오면 침수된다. 3. 침수되지 않은 건물의 영역을 구해서, 이 영역의 '개수'가 최대가 되게 return하면 된다. 풀이 과정 1. 이전 게시글의 섬의 개수와 거의 비슷한 로직이다. 2. main에서 for문이 돌 때를 새로운 안전 영역을 찾는 기준으로 두고 이 때마다 개수를 늘린다. 3. dfs안에서는 방문했던 장소인 것을 체크해 주고 그것을 기준으로 방문하지 않은 다른 안전 영역을 찾아가면 된다. 4. 쭉 구하면 답이 나온다. 5. 주의해야 할 점으로, 비가 아예 오지 않는 경우를 꼭 생각해 주어야 한다. 코드

알고리즘 공부 2021.08.05

Ajax를 통해 불러온 데이터에 클릭 이벤트 바인딩하는법

ajax를 통해 불러온 데이터는 기존에 사용하던 방법으로는 이벤트를 바인딩하지 못한다. 그래서 ajax를 만들 때에 하드코딩으로 바로 event를 넣어버리는 경우가 있는데, event는 따로 javascript태그 안에 만들어 두는 것이 유지보수나 가시성에서 편리하다. 따라서 다른 방법으로 바인딩하는 것이 좋다. $(document).on('click', '클래스명 혹은 id', function(){ 이벤트 내용. }); 이렇게 하면 javascript로 만들어진 값에 클릭 이벤트를 넣을 수 있고, 당연히 ajax로 불러온 데이터도 가능하다. 참고로 click 이벤트 이외에도 여러 이벤트를 바인딩 할 수 있다. 자주 쓰이는 이벤트를 적자면 이벤트명 용도 mouseover 마우스가 올라왔을 경우 mouse..

[백준 4963번] 섬의 개수 - java

문제 설명 1. 각각 테스트 케이스에서 섬의 크기를 입력받는데, 섬의 크기가 0, 0이면 종료되며 그 이전까지는 계속 입력받는다. 2. 해당 섬의 크기에 맞춰 1은 육지, 0은 바다로 지도를 만들어낸다. 3. 각 땅에서 상하좌우대각선 총 7방향으로 땅이 있으면 이동할 수 있다. 3. 모든 테스트 케이스에 맞춰 총 섬의 개수를 return하면 된다. 풀이 과정 1. 지뢰찾기와 비슷한 로직이다. 2. 현재 위치를 기준으로 dfs를 사용하면 된다. 3. 현재 위치 주변 7방향을 탐색하며 check해 주고, 물이면 나가고 땅이면 다시 dfs를 시도한다. 4. for문을 돌려서 check하지 않은 땅들을 기준으로 값을 받아오면 된다. 코드

알고리즘 공부 2021.08.04

패캠 - java/spring 웹 개발 강의 수업 정리(2)

객체지향의 4대 특징 1. 캡슐화 객체의 속성을 보호하기 위해 사용 ex) 컴퓨터 본체 안에 부품이 많이 있는데, 실제로 해당 부품에 전기를 공급할 필요 없이 컴퓨터 전원을 누르면 켜짐. method설계 - 속성이 선언되었으나, 이의 상태를 변경하는 method가 없다면 잘못 선언된 속성이다. 즉 자신이 가지고 있는 속성에 대해서는 해당 상태를 변경하는 기능을 제공해야 한다. - 실물 객체가 가진 기능을 모두 제공해야 한다. - 각각의 Method는 서로 관련이 있어야 한다. - 객체 안의 Method는 객체 안의 속성을 처리해야 하며, 다른 객체를 전달받아 해당 다른 객체에 정의된 속성을 직접 처리하면 안된다. 즉 자신의 속성만을 처리해야 한다. (혹시 외부에서 가져온다면 객체의 형태가 아니라 매개변수..

이론 정리/java 2021.06.28

패캠 - java/spring 웹 개발 강의 수업 정리(1)

객체 지향 예전에는 C언어와 같은 절차 지향 언어가 주를 이루었다. '절차 지향'이란, 실행하고자 하는 순서대로 명령어를 입력하여 실행하는 방법이다. 과거에는 프로그램의 단위가 크지 않았고, 간단한 logic을 순차적으로 처리했기 때문에 절차지향을 사용했는데, 이후 컴퓨터가 발전하면서 프로그램이 복잡해져 유지보수, 개발기간 등 부분에서 비효율이 발생하였다. 이 어려움을 해결하기 위해 객체지향이 도입되었다. '객체지향'이란, 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의하고 절차적이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계한 것이다. 사물(객체), 행위(Method), 사물의 속성(변수-variable)을 사용하였다. 자바와 C++의 차이 java는 시스템 ..

이론 정리/java 2021.06.28

[프로그래머스] 짝지어 제거하기 - java

문제 설명 1. 문자열이 주어진다. 2. 문자열은 두개가 같으면 서로 사라지고, 그 앞뒤의 문자가 다시 붙는다. 3. 이게 끝까지 진행되어 모든 문자열이 사라지면 1, 남은 문자가 있으면 0을 return하면 된다. 풀이 과정 1. 선입 후출법을 통해 구현 가능하다. 2. -> 가장 최근에 넣은 값 - 다음 값이 같은 경우 : 가장 최근에 넣은 값 삭제 -> 가장 최근에 넣은 값 - 다음 값이 다른 경우 : 다음 값을 넣기 3. 위의 process를 전체 문자열의 길이만큼 진행하면 구할 수 있다. 근데 솔직히 이게 왜 level2인지는 모르겠다... level1중에 이것보다 어려운 문제가 있던 것 같은데 코드

알고리즘 공부 2021.06.25

[프로그래머스] 소수 만들기 - java

문제 설명 1. 배열이 주어진다. 2. 배열의 숫자들은 1000이하의 서로 다른 숫자이다. 3. 배열의 숫자들 중 3개를 더해 소수가 되는 경우의 개수를 return하면 된다. 풀이 과정 1. 아리스토텔레스의 체를 이용하여 해당하는 위치가 맞는지 구하면 된다. 2. 1000이하의 서로 다른 수이기 때문에 최대 숫자를 1000+999+998이다. 체의 크기를 그걸 기준으로 정하면 된다. 3. 숫자는 1부터 세고, 나는 보기 좋게 3000을 기준으로 잡았다. 코드

알고리즘 공부 2021.06.22

[프로그래머스] 키패드 누르기 - java

문제 설명 1. 왼손은 *, 오른손은 #에 위치한다. 2. 1 4 7은 왼손, 3 6 9는 오른손으로 누른다. 3. 2 5 8 0은 둘 중 가까운 손으로 누른다. 거리가 같은 경우 오른손잡이인지 왼손잡이인지에 따라 누른다. 4. 누르는 순서를 return하면 된다. 풀이 과정 1. 좌표를 통해 간단히 구현 가능하다. 2. 그런데 이중배열을 사용하지 않아도, 가로 거리와 세로 거리를 더해주면 된다. 3. 따로 구하는 이유는 세로 거리의 경우 어차피 0, 1의 차이밖에 나지 않기 때문이다. 4. 몇 가지 반례에 맞추어 조금만 추가하면 된다. 5. 구현하기는 쉽지만 생각해내지 못하는 경우 코드를 보고 이해하기 어려울 것이라 생각해서 최대한 설명을 자세히 적었고, 풀이를 쪼개서 진행하였다. 코드

알고리즘 공부 2021.06.20