본문 바로가기

전체 글

(164)
[백준] JAVA - 7569.토마토 package com.java.algorithm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; class Tomato{ int h; int y; int x; public Tomato(int h, int y, int x) { this.h = h; this.y = y; this.x = x; } } public class Baekjoon_7569_토마토 { /** * 토마토익은곳 위 아래 평면기준 네 방향 익어버림 (3차원) * 며칠이 ..
[백준] JAVA - 3055.탈출 생각 좌표에서 초기 물의 위치가 한개이상 주어질수 있습니다. 그렇기 때문에 BFS문제로 접근하되 물을 먼저 큐에 넣어주고 물의 이동에 대한 모든 처리를 끝내준 다음 고슴도치를 이동시켜야 하는 BFS 문제입니다. (바로 전날에 7569 토마토문제를 풀어봐서 비슷한 유형이라고 느꼈습니다.) 처음에는 물과 고슴도치의 좌표 정보를 구분해서 줘야되나라고 생각하다가 (전에 풀어본 SWEA 배틀필드 문제가 생각났습니다.) 클래스 정보에 고슴도치와 물을 구분하는 값을 줘서 처리했습니다. (고슴도치 : 1, 물: 0) 1. 처음 입력을 받을때 큐에 물의 좌표를 넣습니다. 이때 구분값도 같이 넣어줍니다. 2. 마지막으로 고슴도치의 위치를 큐에 넣습니다. 마찬가지로 구분값도 같이 넣어줍니다. 3. 고슴도치의 이동 거리를 저..
[백준] JAVA - 1520.내리막길 입력조건 범위를 대충 확인하고 DFS로 풀어야지ㅎㅎ 했다가 시간초과가 나서 다시 DP로 풀었습니다. 테스트 케이스는 맞는데 시간초과가 뜨면 너무 슬프네요ㅠㅠ 시간초과가 난 이유는 사방탐색에 재귀로 계속 다음단계를 정하러 들어가므로 4의 (N*M)제곱 이 되기때문에 약 4의 500*500 제곱번의 연산을 수행하게 됩니다. 제가 정의한 DP[i][j] 는 시작좌표인 (0,0) 에서 (i,j)로 갈수있는 경로수의 합입니다. 이떄 초기 dp의 값을 -1로 초기화를 해줘야 합니다. 만약 이렇게 해주지 않으면 내리막길로 이동을 하다가 멈추는 지점이 존재할수있는데 그 지점에서의 dp 값은 0이 됩니다. 여기서 초기값을 0으로 해주었으면 같은 경우라고 판단하기때문에 연산을 다시 수행하게 됩니다. 따라서 -1로 초기화를..
[파이썬 머신러닝 완벽 가이드 정리] 1. 파이썬 기반의 머신러닝과 생태계 이해 - #3 Pandas 2차원 데이터 핸들링을 위해서는 판다스를 사용하자! 데이터 처리를 직접 수행해보면서 문제에 부딪힐때마다 판다스의 다양한 API 를 찾아서 해결해 가자! 주요 구성 요소 - DataFrame,Series,Index DataFrame Column * Rows 2차원 데이터셋. 행 번호는 Index로 고유한 Key객체이다. Series 1개의 Column값으로 구성된 1차원 데이터 셋 기본적으로 Pandas의 DataFrame은 ndarray로 구성된다. DataFrame에서 Series 추출 및 DataFrame 필터링 추출 DataFrame객체에서 [ ]연산자내에 한개의 컬럼만 입력하면 Series 객체 반환 DataFrame객체에서 [] 연산자내에 한개의 컬럼을 리스트로 입력하면 한개의 컬럼으로 구성된 ..
[파이썬 머신러닝 완벽 가이드 정리] 1. 파이썬 기반의 머신러닝과 생태계 이해 - #2 Numpy Numpy ndarray : N차원 배열 객체 한 개의 ndarray객체에 같은 데이터 타입만 존재해야 한다. 즉, 한 개의 ndarray객체에 int와 float가 함께 있을수없다. ndarrray 데이터 타입 확인 연산 : ndarray.dtype import numpy as np array1 = np.array([1,2,3] #shape(3,) 1차원 요소를 3개만 가지고 있다. array1 = np.array([1,2,3],[2,3,4]) #shape (2,3) 2행 3열 ndarray 타입 변환 대용량 데이터를 다룰 시 메모리 절약을 위해서 형변환을 고려해야한다. astype()을 이용하여 변환. ndarray 편리하게 생성하기 - arange, zeros, ones reshape() : nda..
[파이썬 머신러닝 완벽 가이드 정리] 1. 파이썬 기반의 머신러닝과 생태계 이해 - #1 1. 머신 러닝 개념 머신러닝이란 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 추론하는 알고리즘 기법. 머신러닝, 왜 필요한가? 수시로 변하는 업무 환경, 정책, 사용자 성향에 따른 애플리케이션의 구현 어려움 많은 자원과 비용을 통해서 구현된 애플리케이션의 예측 정확성 문제 이러한 문제를 데이터 기반으로 숨겨진 패턴을 인지해 해결할수있다. 데이터를 기반으로 통게적인 신뢰도를 강화하고 예측 오류를 최소화하기 위한 다양한 수학적 기법을 적용해 데이터 내의 패턴을 스스로 인지하고 신뢰도 있는 예측 결과를 도출해냅니다. 예측과 추론을 수행함으로써 신뢰도 있는 예측 결과를 도출해 낸다. 머신러닝의 분류 지도 학습 : 명확한 결정값이 주어진 데이터를 학습. 특정 레이블을 줘야함. 예를들어..
[백준] JAVA - 14503.로봇청소기 생각 문제 자체는 단순하다고 생각했습니다. 그런데 후진 조건을 잘못 생각해서 고생한 문제입니다ㅠㅠ 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 청소를 진행한다고 적혀있어서 정말 단순하게 '4방향 벽 and 4방향 청소이미한곳' 이라고 코드를 짰더니 계속 값이 적게 나왔습니다.. 구글링을 통해 후진조건은 4방향을 청소기가 탐색했는데 더이상 청소불가 and 전진불가라는것을 알았습니다. 우선 문제의 전체적인 로직은 BFS탐색을 통해 청소기를 계속해서 이동시켰고 추가적으로 후진조건을 넣었습니다. 또한 이런 그래프 탐색 문제에 추가적인 조건이 있는 문제 같은 경우 BFS를 사용한 코드가 문제 해결에 적합할수있다는 것을 스터디원에게 배웠습니다!! 청소기는 왼..
[백준] Python - 10971.외판원순회2 생각 각 도시마다 간선별 비용이 다를수있으므로 도시별로 방문 순서가 다르면 비용이 다릅니다. 따라서 이를 순서의 다름이 의미의 다름을 뜻하는 순열로 생각하고 문제를 풀었습니다. i->j 로 가는 도시의 비용을 저장하는 2차원 배열을 만들어 입력을 통해 모두 저장해줍니다. 방문체크를 위해 N개의 도시의 방문여부를 False로초기화시켜줍니다. 도시의 방문 순서를 만들어주는 dfs 함수입니다. 다음노드를 방문할수있는 상태(0보다 큰값을 가지는 노드)이고 방문하지 않았다면 방문 체크를 True로 만들어주고 다음 단계로 들어갑니다. 이때 비용은 현재 비용에서 다음방문 비용을 더해줘야합니다. 현재노드에서 뒤로 나열할수있는 모든 도시를 정했으므로 다음 노드의 순열을 만들기위해 방문 체크를 False로 갱신합니다. 모..