본문 바로가기

전체 글46

나무재테크로 알아보는 Map 자료구조 나무 재테크 풀이 보러가기 https://shinyou1024.tistory.com/52 백준 16235 나무 재테크 삼성 코딩테스트(역량테스트) 기출 해싱 각 칸마다 Map 자료구조로 나무의 상태를 관리한다 { 나이 : 해당 나이인 나무 수} 형태 TreeMap : 순서가 있는 Map 자료구조 나이순으로 관리하기 위해 HashMap� shinyou1024.tistory.com TreeMap 순서가 있는 Map 자료구조 선언 이중 리스트의 요소가 Map인 구조로 작성했다 우선 new로 전체 자료구조를 생성한다 첫 번째 포문을 돌면서 i마다 new ArrayList을 add한다 두 번째 포문에서 j마다 dict.get(i)에 new TreeMap을 add한다 // 각 칸마다 트리맵 사용해 나무를 관리 {나.. 2020. 6. 3.
백준 16235 나무 재테크 삼성 코딩테스트(역량테스트) 기출 해싱 각 칸마다 Map 자료구조로 나무의 상태를 관리한다 { 나이 : 해당 나이인 나무 수} 형태 TreeMap : 순서가 있는 Map 자료구조 나이순으로 관리하기 위해 HashMap이 아니라 TreeMap을 이용했다 ⇒ 나무 마다 관리하는 게 아니라 속도가 향상된다 ⇒ 하지만 메모리는...포기한다! 오답노트 Map을 순회하면서 요소를 삭제하면 안 된다 concurrency 오류가 날 수 있다 ⇒ 임시 자료구조에 저장해 놓고 for문이 끝난 후 한 번에 갱신하자 Map을 비우고 나이 먹은 애들로 다시 Map을 구성한다 ⇒ 이렇게 안 하면 나무 수가 0인 요소가 계속 남아있게 된다! survive>0인 경우에만 agedTree에 넣어줘야 함 가을 겨울은 간단하니까 봄 / .. 2020. 6. 3.
SWEA 5650 핀볼게임 시뮬레이션 풀이 방식 모든 칸에 4방향으로 핀볼을 놓아본다 빈 칸이 아니면 해당 케이스는 패스 블록 : changeDir 배열을 참조해 다음 방향 지정 changeDir[i][j] ⇒ j 방향으로 (i+1)블록에 부딪혔을 때 바뀌는 방향 웜홀 : 이차원 리스트로 관리 1) makeWorm을 통해 (번호-6)의 리스트에 넣어준다 2) changeWorm을 통해 순간 이동 처리 ⇒ 첫 번째 웜홀 위치와 같다면 두 번째 웜홀을, 두 번째 웜홀 위치와 같다면 첫 번째 웜홀을 리턴 벽 : 경계 밖을 벗어나면 (d+2)%4를 해준다 (d+2)%4는 반대방향임 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java... 2020. 5. 30.
백준 1525 퍼즐 풀이 방식 3 x 3을 한 줄 짜리 문자열로 만들어서 상태를 저장한다 visit을 2차원 배열 대신 Set에 문자열을 add해서 체크한다 오답노트 다음 칸을 {-3, 1, 3, 1}로 설정할 경우, {-1, 0, 1, 0}으로 델타 값을 설정하고 /, % 연산을 통해 좌표의 인덱스를 구해주는 게 더 깔끔한 방법일 것 같다 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set.. 2020. 5. 30.
iOS 카카오 로그인 연동 (Swift) 준비 Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 1. 애플리케이션을 추가한다 2. 동의항목 탭에서 프로필 정보의 상태를 필수 동의로 바꿔준다 3. 카카오 로그인 탭에서 활성화 설정 상태를 ON으로 바꿔준다 Kakao SDK 연동 Kakao SDK 다운로드 Kakao Developers '+' 버튼을 눌러서 KakaoOpenSDK와 KakaoMessageTemplate을 임포트 KakaoOpen SDK만 넣었더니 오류가 났다..! 3. Build Settings 탭에서 All을 선택한 후 Linking의 Other Linker Flags를 -.. 2020. 5. 24.
백준 9376 탈옥 https://www.acmicpc.net/problem/9376 9376번: 탈옥 문제 상근이는 감옥에서 죄수 두 명을 탈옥시켜야 한다. 이 감옥은 1층짜리 건물이고, 상근이는 방금 평면도를 얻었다. 평면도에는 모든 벽과 문이 나타나있고, 탈옥시켜야 하는 죄수의 위치도 � www.acmicpc.net 이 문제는 공부 삼아 블로그를 참고해서 풀었다 (https://stack07142.tistory.com/145 님 블로그) 정말 혼자서는 생각도 못 해낼 방법인 듯... 많이 배웠다! 기본 기본적으로 이 문제에서 가중치는 연 문의 개수이다 (Pos 객체의 door변수로 체크) visit 배열을 방문/미방문이 아니라 몇 개의 문을 열어 해당 지점에 도착했는지를 기록한다 더 적은 가중치(연 문의 수)로 해당 .. 2020. 5. 21.
백준 1062 가르침 알고리즘 k-5개만 고르면 된다 모든 단어가 "anta"로 시작하고 "tica"로 끝나므로 {'a', 'n', 't', 'i', 'c'}는 무조건 알고 있어야 한다 나머지 알파벳 중 k-5개를 마저 뽑아서 시뮬레이션(?)을 돌리면 된다 나는 무조건 알야야 하는 알파벳(origin)과 뽑을 알파벳(pick)으로 나눠서 체크해줬다 배운 것 1. List의 contains()메소드 리스트에 해당 요소가 있는지 알려준다 2. 문자열 처리 for(int i=0; i 2020. 5. 21.
iOS 애플리케이션 구조와 개발 아키텍처 MVC 애플리케이션 코드를 처리하는 로직과 데이터를 프레젠테이션하는 코드와 분리한다 MVC를 이루고 있는 객체들 Model : 사용되는 데이터를 캡슐화 View : 사용자 인터페이스 표현 및 관리 Controller : 애플리케이션의 로직 뷰의 입력을 모델이 반영 & 모델의 변화를 뷰에 갱신 ViewController Model과의 상호작용 : 노출한 메서드와 프로퍼티를 이용 View와의 상호작용 : Target-Action 패턴 (Outlet과 Action) Target-Action 패턴 목적 : 이벤트 발생 시 어떤 일이 발생할 지 지정 즉, 사용자가 뷰 객체에 이벤트를 가했을 때 컨트롤러 객체의 어떤 메서드가 호출되는지를 정의 Action 뷰 객체가 뷰 컨트롤러 객체의 특정 메서드를 호출하는 것 인.. 2020. 5. 20.
스프링 자주하는 실수 스프링을 공부하다가 디버깅했던 경험을 적습니다. 계속 업데이트 됩니다... 아마? 404 에러 컨트롤러 @Controller를 붙였는지 @RequestMapping을 잘 적었는지 root-context.xml 컨트롤러를 등록했는지 Context:component-scan is not bound [오류]context:component-scan" is not bound index.jsp가 바로 나오게 하고싶다! value를 "/"으로 변경!! ⇒ 실패...! MyBatis Caused by가 달린 줄만 잘 보면 된다 맨 오른쪽에 가면 Cannot find class : com.shinyou.hr.to.Employee 이런 식으로 쓰여 있다 servlet-context.xml 에러 Mapped Statemen.. 2020. 5. 20.
SWEA 2112 보호필름 백트래킹 가지치기를 잘 해야 시간초과가 나지 않는다 한 열이 실패하면 그 경우는 무조건 실패다 → return false 한 열에서 k개 이상이 되면 그 열은 성공이다 → continue loop 해서 다음 열 탐색으로 넘어가자 0개부터 개수를 늘려가며 투여하므로 앞에서 답이 나왔다면 (ans≠-1) break하고 출력한다 알고리즘 1. 어떤 행에 약품을 투여할지 조합으로 정한다 (0개 ~h-1개) - h-1개까지 해서 안 되면 h개 투여해야하는 거니까 예외처리로 출력해준다 - 새로운 dfs마다 memcpy를 해준다 2. 0개부터 개수를 늘려가며 투여하므로 앞에서 답이 나왔다면 (ans≠-1) break하고 출력한다 3. 조합을 돌리면서 재귀 전 insert, 재귀 후 delete로 약품 투여를 처리해준.. 2020. 5. 20.
Spring Framework 개념 EJB EJB : 자바 엔터프라이즈 애플리케이션 개발 표준 이 대안으로 Spring Framework가 나왔다 Spring Framework 자바 엔터프라이즈 개발을 위한 오픈소스 경량 애플리케이션 프레임워크 공통 프로그래밍 모델 및 Configuration 모델 제공 프레임워크가 애플리케이션 수준의 인프라 구조 제공 엔터프라이즈 시스템 : 서버환경에서 동ㅇ—- 다른 프레임워크와의 연동이 좋다 스프링 삼각형 POJO (Plain Old Java Object) POJO : 특별한 기술에 종속되지 않은 순수한 자바 객체 다른 클래스에 종속적이지 않은 (다른 클래스를 상속하지 않는) 클래스! 테스트가 쉽고 객체 지향 설계를 자유롭게 적용할 수 있음 엔터프라이즈 시스템의 복잡함을 나눠서 개발할 수 있다 스프링은.. 2020. 5. 19.
Kruskal Kruskal MST를 만드는 알고리즘 중 하나이다 간선이 많을 때 사용하면 Prim 알고리즘보다 성능이 좋다 수도 코드 1.Edge 클래스 생성 & edgeList 생성 2.union-find 메서드들 생성 findSet, isSameParent, union 3.makeSet 4.간선의 가중치 기준 오름차순 정렬 5.모든 간선을 탐색하며 다른 집합에 속하면 sum갱신 & union 자바로 구현한 Kruskal public class Kruskal { static class Edge implements Comparable{ int a, b, cost; public Edge(int a, int b, int cost) { super(); this.a = a; this.b = b; this.cost = cos.. 2020. 5. 19.
백준 16137/SWEA 4727 견우와 직녀 건널 수 있는지 여부 확인 방법 쉬는 시간엔 건널 수 없다! 대기하는 걸 구현하지 않고 이미 대기한 후의 시간(nt)을 계산해서 큐에 넣는다 int waitTime = map[nx][ny] 또는 m (원래 오작교인지 새로 짓는 오작교인지 여부에 따라) int nt = t + (waitTime - (t%waitTime); BFS 건널 수 있는 경우(길, 오작교)와 없는 경우(절벽)으로 나눈다 건널 수 있는 경우 길 ⇒ 일반 BFS 오작교 : 이전에 건넌 적 없었는지 확인 없는 경우 : 새로운 오작교를 만들 수 있는가를 확인! 직전 칸(map[x][y])이 오작교였던 경우 불가 교차하는 곳은 불가 : 포문 돌리며 가로와 세로에 있는 1의 개수를 세어 둘 다 1 이상이면 불가 BFS 코드 static void.. 2020. 5. 16.
카카오 코딩테스트 2019 블록 게임 종류 : 브루트포스 1. 사실 없앨 수 있는 블록의 모양은 다섯개 뿐이다 - 검은 돌을 떨어트려서 꽉 찬 모양을 만들려면 동그라미 친 다섯 개 모양 중 하나여야 한다 2. 기준점을 (0, 0) 잡고 블록의 다른 부분을 상대좌표로 표현해준다 => types에 미리 저장 - 채워야 할 부분은 empty에 상대좌표로 미리 저장해 놓는다 types = [ # 각 행은 모양의 인덱스 [[1, 0], [1, 1], [1, 2]], [[1,0],[2,0],[2,-1]], [[1,0],[2,0],[2,1]], [[1,0],[1,-1],[1,-2]], [[1,0],[1, -1], [1, 1]] ] empty=[ [[0, 1], [0, 2]], [[0, -1], [1, -1]], [[0, 1], [1, 1]], [[0, .. 2020. 5. 5.
SWEA 5653 줄기세포 배양 풀이방식 Priority Queue를 활용한 시뮬레이션 baby : 비활성화 세포 (활성화 시간 기준 PQ) adult : 번식할 세포 (생명력 기준 PQ) old : 활성화됐지만 번식하지 않는 세포 (죽는 시간 기준 PQ) 활성화되는 시간 : 태어난 시간(birth) + 생명력(power) 죽는 시간 : 태어난 시간(birth) + (생명력(power) * 2) 1. 번식 adult 큐에서 상하좌우 탐색 - 비어있으면 채우기 - adult에 넣기 2. 활성 baby 큐에서 (활성화시간 == 현시간)인 애들를 adult에 옮기기 (우선순위 큐이므로 안 되는 애가 나오면 바로 break : 그 뒤로는 이후에 활성화되는 애들이기 때문) 3. 죽은 세포 처리 : old 큐에서 (죽는 시간==현시간)인 애들을 .. 2020. 4. 24.
JSP 1. 개요 JSP 특징 웹 페이지를 동적으로 처리할 수 있는 기술 중의 하나 서블릿 프로그램의 기능을 HTML 파일 내에 스크립트 형식으로 구현할 수 있음 이점 프레젠테이션 로직과 비즈니스 로직의 분리 프레젠테이션 로직 : 브러우저 화면의 표현을 꾸미는 절차 및 기능 비즈니스 로직 : 사용자 요청에 대한 내부적인 처리 절차 분리의 중요성 : 웹 페이지 디자인이 변경돼도 내부 비즈니스 로직의 변경이 필요 없음! (반대도 마찬가지) 컴포넌트 재사용 JSP페이지나 자바빈즈에서 공통적으로 사용되는 컴포넌트를 만들어 재사용 예 : 주소 검색, 한글 처리, DB 연결 기타 JSTL, EL, 커스텀 태그 활용 가능 서버 자원의 효율적 관리 JSP의 처리과정 최초 요청 시 JSP 파일은 Servlet으로 변환 ⇒ 클래.. 2020. 4. 24.
Servlet 개요 Servlet : 웹 서버(컨테이너)에서 수행되는 자바 클래스 서버의 응용 프로그램을 구현하는 기술 서버 프로토콜 종류에 관계없이 여러 애플리케이션 기반의 응용프로그램 개발 가능 주요 서버 환경 : HTTP 프로토콜 클라이언트의 요청에 대해 서블릿 컨테이너에 의해 독립된 스레드 기반으로 서비스 ⇒ 프로세스 기반 서비스인 CGI보다 속도 빠름 서블릿 컨테이너 : 클라이언트에서 전송되는 서블릿 요청/응답에 대한 처리 담당 비즈니스 로직과 프레젠테이션 로직이 혼합된 형태 단점 : html 코드가 변경되면 매번 서블릿을 재컴파일 해야 함 동작 과정 웹 클라이언트가 웹 서버에게 HTTP 요청 메시지 보냄 (GET/POST) 웹 서버가 HTTP 요청을 해석 서블릿에 대한 요청일 경우 서블릿 컨테이너에게 요청 .. 2020. 4. 24.
백준 게리맨더링 2 풀이 경계선의 안쪽 부분을 어떻게 처리해줄지가 가장 어려웠다. (x, y)를 마름모꼴의 윗 꼭짓점이라고 했을 때, x부터 x+d1+d2까지 포문을 돌리며 5에서 5사이를 처리해준다 즉, 마름모꼴의 맨 위부터 맨 밑까지 경계선이 5로 칠해져있기 때문에 5 0 0 0 0 5 이 부분을 5 5 5 5 5 5 이렇게 바꿔서 선거구 5로 기록해준다 (오답부분 그림 참고) import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public cla.. 2020. 4. 24.
백준 16234 인구이동 오답노트 - 우, 하가 아니라 4방향 검사해야 함 소스코드 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class BOJ_16234_인구이동 { static class Pos{ int x, y; public Pos(int x, int y) { super(); this.x = x; this.y = y; } @Override public String toString(.. 2020. 4. 24.
Xcode TARGETS General version과 build Deployment Info : 배포 환경 (OS 버전) Embedded Library : 라이브러리가 들어간 채로 배포 Linked Frameworks and Libraries Capabilities App Groups : 앱 간의 통신. 값 주고 받는 게 편해짐 Background Modes : 백그라운드에서 작동하는 것 버튼 assistant editor : 관련된 파일이 자동으로 매칭돼서 보임 우측 상단 : 로그 창 같은 거 보였다 안 보였다 하게 파일 설명 storyboard : 흐름도 : General의 Deployment Info에서 Main이 되어 있어야 main.stroyboard로 이동함 xcassets : 이미지 파일을 넣음 In.. 2020. 4. 24.