반응형

분류 전체보기 285

자바(JAVA) - 입출력 스트림

자바(JAVA) - 입출력 스트림 입출력 스트림이란? 스트림(Stream)을 한글로 번역하면 개울, 시내, 줄기, 줄줄 흐르다로 번역됩니다. 입출력 스트림에서 스트림은 순서가 있는 데이터의 연속적인 흐름이라 할 수 있습니다. 입출력 스트림은 입출력 장치와 자바 응용 프로그램을 연결하는 역할입니다. 기본 단위는 바이트 이며, 단방향 스트림과 선입선출의 구조를 가집니다. 입력 스트림 : 입력 장치(키보드 등)으로 부터 받은 입력 값을 자바 응용 프로그램으로 전달하는 객체입니다. 자바 응용 프로그램은 입력 장치로부터 직접 데이터를 읽지 않고 입력 스트림을 통해 데이터를 읽습니다. 출력 스트림 : 자바 응용프로그램으로 부터 출력 장치(화면 등)으로 데이터를 보내는 객체입니다. 입력 스트림과 마찬가지로 직접 데이..

[백준 Baekjoon] 21610번 마법사 상어와 비바라기 - JAVA

[백준 Baekjoon] 21610번 마법사 상어와 비바라기 - JAVA 문제 풀이 문제에서 주어진 격자는 (1, 1)부터 (N, N)의 크기이지만, 저는 (0, 0)부터 (N-1, N-1)의 크기로 만들어 사용하였습니다. 방향 이동 또한 1부터가 아닌 0부터 순서대로 하였습니다. 구름은 이동하고 비가 내린 다음 이동하기 때문에 큐를 사용하였습니다. 처음 구름은 (N-1, 0), (N-2, 1), (N-2, 0), (N-2, 1) 4칸에 존재하여 4칸을 큐에 추가합니다. 1. 구름이 di 방향으로 si칸 이동한다. 큐에 존재하는 모든 구름에 대하여 x, y값을 변경해줍니다. // 구름이 di 방향으로 si칸 이동 cloud.x = (N + cloud.x + dx[d] * (s % N)) % N; clou..

자바(JAVA) - 폴더 파일명 변경

자바를 사용해서 원하는 폴더의 모든 파일명을 변경하는 방법입니다. 이 글과 보시는 분의 목적이나 방법이 다를 수 있습니다. 저는 알고리즘 폴더의 파일명들을 변경하고 싶어 이 코드를 작성하여 파일명을 변경하였습니다. 원하는 폴더의 절대 경로를 가져와 저장합니다 String path = "/Users/dlee/Desktop/Algorithm_Study/backjoon/"; 절대 경로를 가져오는 방법은 워낙 다양해서 편한 방법으로 찾았다고 가정하겠습니다. 폴더를 가져오기 위해 java.io에 있는 File 클래스를 사용할 것입니다. import java.io.File; File클래스의 생성자 중 File(String pathname)으로 생성하면 입력한 pathname 경로 파일의 객체를 생성합니다. File..

[백준 Baekjoon] 17142번 연구소 3 - JAVA

[백준 Baekjoon] 17142번 연구소 3 - JAVA 문제 풀이 시간 제한이 0.25초라는 말에 조금 겁을 먹었던 문제이었습니다. 문제를 읽어보면서 저 짧은 시간안에 어떻게 풀어야할지 고민을 많이 했었는데, M개의 바이러스를 선택해 그래프 탐색으로 검사하는 방법밖에 생각나지 않았고, 맞는 방법이라 생각했습니다. 우선 입력을 받으면서 빈 칸의 수(emptySpace), 바이러스의 위치(list)를 저장해야 합니다. 혹시나 제출하시고 92%에서 틀린다면 빈 칸의 수가 0인 경우를 검사하지 않았기 때문일 것입니다. 제가 작성한 방법에서도 빈 칸이 있다고 가정하고 확산을 하여 무조건 1이상이 나옵니다. 전체 바이러스에서 M개의 바이러스를 선택해서 확산을 시키고 검사해야 합니다. 조합을 사용하여 M개의 바..

[백준 Baekjoon] 1422번 숫자의 신 - JAVA

문제 풀이 유의사항 1. 각 수는 1,000,000,000의 크기로 문자열을 사용하여 이어 붙여야 한다. (자바의 문자열은 compareTo() 함수를 사용하여 비교가 가능하다.) 2. 숫자가 중복될 수 있으므로 가장 큰 수를 찾아 반복할때 유의해야한다. 정렬만 잘하면 쉽게 해결할 수 있는 문제이다. 두 수를 붙였을때 어떤 숫자가 더 큰지를 기준으로 정렬을 해야한다. Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2)); 위의 정렬식을 보면 o2 + o1과 o1 + o2를 비교하여 정렬을 수행한다. 이어 붙였을때 가장 큰 수를 찾고, 반복해야할 수를 찾아 순서대로 합치는것으로 정답을 찾을 수 있다. 문제의 예제 3을 예시로 들면 o1을 1, o2를 10..

[백준 Baekjoon] 1826번 연료 채우기 - JAVA

문제 풀이 우선순위 큐를 활용하여 풀 수 있는 문제이다. 주유소 정보를 거리(a) 오름차순으로 저장하는 우선순위 큐를 사용하여 입력받는다. 예제의 주유소는 거리순으로 주어지지만, 항상 거리순으로 주어지지 않는다. 현재까지 갈 수 있는 거리의 주유소 중에서 가장 연료의 양이 많은 주유소를 방문해야 한다. 주유소 정보 stations에서 현재까지 갈 수 있는 거리(P) 내의 주유소 연료 양을 fuels에 추가한다. fuels는 연료 양을 내림차순으로 저장하는 우선순위 큐이다. fuels에서 하나를 방문(poll)하고 현재 갈 수 있는 거리(P)를 증가시킨다. 주유소를 방문하였으므로 answer도 1증가 시킨다. 현재 갈 수 있는 거리 P가 L을 넘으면 목적지까지 갈 수 있으므로 종료된다. 만약 fuels가 ..

[백준 Baekjoon] 2641번 다각형그리기 - JAVA

문제 풀이 입력받은 표본 모양수열과 같은 모양수열을 찾는 문제이다. 같은 모양수열은 화살표의 출발 지점이 다른 경우와, 화살표 방향이 반대인 경우에 존재할 수 있다. 우선 화살표 방향이 반대인 경우를 만들어야 한다. 그 다음 정방향과 역방향 둘 모두에 대해 출발 지점이 다른 경우를 고려해야 한다. 정방향은 forward, 역방향은 reverse라 한다. 입력을 받을 때에 역방향은 1 -> 3, 2 -> 4, 3 -> 1, 4 -> 2로 방향을 변경해주며, 출발을 반대(insert idx 0)로 해줘야 한다. 출발지점이 다른경우는 swap 방식을 통해 0번 인덱스를 맨 뒤로 옮기는 방식으로 하였다. 같은 다각형 검사를 위해 정방향, 역방향에서의 모든 경우를 set에 추가한다. 모양수열을 입력받아 set에 ..

[백준 Baekjoon] 2659번 십자카드 문제 - JAVA

문제 풀이 십자모양의 카드의 네 모서리 숫자의 시계수가 모든 시계수 중에서 몇 번째로 작은 시계수인지 출력하는 문제이다. 시계수란 카드의 모서리 숫자를 시계 방향으로 읽어 만들어지는 네 자리 수들 중에서 가장 작은 수이다. getMin() 함수가 시계수를 구하는 함수이다. 각 모서리에서 읽어 만드는 수 중에서 가장 작은 수를 리턴한다. 다음으로 모든 시계수 숫자를 찾는다. 0이 나타날 수 없으므로 1111 ~ 9999를 한번에 탐색하는 것이 아닌 각 자리수를 1 ~ 9까지 순회하며 시계수를 찾는다. 찾은 모든 시계수 중에 입력으로 주어진 숫자의 시계수 보다 작은 수를 카운트하여 출력한다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; ..

컴퓨터 네트워크 - TCP 특성, 송수신측 이벤트

TCP의 특성 TCP는 IP의 신뢰성없는 서비스 위에 신뢰성 있는 전송 서비스를 구현한다. cumulative acks 사용한다. 하나의 재전송 타이머를 사용한다. 재전송을 유발시키는 경우는 타임아웃 이벤트와 중복 ACK 수신의 경우이다. point-to-point: 한개의 송신자(one sender), 한개의 수신자(one receiver) 신뢰성reliable): 재전송을 통해 신뢰성있게 한다. 순차 바이트 스트림(in-order byte stream): 순서대로 전송. 어플리케이션 측에서 보면 하나의 스트림이 바이트 단위로 쭉 들어오는 것처럼 보인다. pipelined: ACK없이도 window를 통해 여러 패킷을 보낼 수 있다. 혼잡제어와 흐름제어가 가능하다. send & receive buffe..

컴퓨터 네트워크 - TCP segment structure

TCP segment structure TCP 세그먼트의 헤더는 총 20 bytes로 구성된다. (32bits(4bytes) * 5 = 20 bytes, 옵션은 제외) source port # : 송신측의 포트 번호 dest port # : 수신측의 포트 번호 sequence number : 해당 세그먼트의 첫 번째 데이터 바이트가 응용층에서 보낸 전체 데이터 스트림에서 몇 번째 바이트인가를 표시한다. TCP 연결이 맺어질 때 초기의 sequence number는 송수신 모두 랜덤 하게 선택한다. 예시로 500,000 bytes의 데이터 스트림 파일 전송에서, MSS(maximum segement size, 헤더부분 제외)가 1,000 bytes면 데이터 스트림은 세그먼트 크기가 1,000 bytes인 ..

반응형