![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/enH3MD/btq1C1Knoj9/yDh7cGsoKVUwQnTYLssop1/img.png)
URL Class를 살펴보기 전에 우선 URL의 구성 성분들에 대하여 훑어보고 넘어가려고 한다. URL의 형식: 프로토콜:// 인터넷 주소[:포트번호] [/디렉토리] [/파일 이름][? 쿼리 스트링] , [] = 생략 가능 https://til-choonham.tistory.com:portNum/log/index.html?id=choonham - 프로토콜 : 저 원에 접근하기 위해 서버와 통신에 사용되는 통신규약 - 인터넷주소 : 자원을 제공하는 서버의 주소(이름) - 포트번호 : 통신에 사용되는 서버의 포트번호 - 디렉토리, 파일 이름 : 자원이 저장되어 있는 서버상의 위치 - 쿼리스트링 : ‘?’ 문자 뒤에 오는 통신에서 사용되는 매개변수 이런 기본적인 개념부터 제대로 짚고 넘어가야 클래스를 생성하고..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/1F1KJ/btq1BxJnV7s/zPd48WkkaR9uaOzEOPTl00/img.png)
InetAddress Class: 인터넷 주소(IP)에 관한 정보를 다루는 클래스, 생성자가 따로 없으며 InetAddress클래스의 정적 메소드에서 정보를 받아오는 형식으로 사용한다. 특이하게도 기본 생성자의 접근 제한자 default이기 때문에 new 연산자 객체를 생성할 수 없다. 따라서 InetAddress 클래스는 객체를 생성해 줄 수 있는 5개의 static 메서드를 제공하고 있다. InetAddress 클래스의 주요 메서드: byte[] getAddress() IP주소를 byte배열로 반환 static InetAddress[] getAllByName(String host) 도메인명(host)에 지정된 모든 호스트의 IP주소를 배열로 반환 static InetAddress getByAddres..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/lY28N/btq1uwejRA5/EqWd7QjMwBkAGvuNnrY7ak/img.png)
제한사항 array의 길이는 1 이상 100 이하입니다. array의 각 원소는 1 이상 100 이하입니다. commands의 길이는 1 이상 50 이하입니다. commands의 각 원소는 길이가 3입니다. 중요한 건 Commands에 "모든" 배열에 대하여 각각 연산을 하고, 리턴 값을 받아야 한다는 것. 이 점만 주의하면, 딱히 신경쓸 건 없어보이는 쉬운 문제이다. 배열과 i, j를 받아 우선 받은 배열을 자르는 cutter 메서드를 추가하고, commands의 개수만큼 cuuter로 자른 결과 배열을 정렬, 그 후 찾는 위치에 있는 값을 출력하도록 작성했다. package com.choonham; import java.util.ArrayList; import java.util.Arrays; impo..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/exHVW4/btq1z3IkR3M/tpvnflWJlvnPItluw2lz50/img.png)
명령어 데이터를 받아서 이를 따로 읽어들여 연산을 처리하는 이중 Priority Queue를 구성하면 되는 문제인 것 같다. 이런 LV3 문제들은 제한 사항을 똑바로 숙지하지 않아서 삽질을 하는 경우가 꽤 있었으므로, 제한 사항을 따로 적어 확실하게 하고 넘어가는 것이 좋겠다는 생각이 든다...ㅎㅎ 어제 데어봐서.. 제한 사항: operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다. operations의 원소는 큐가 수행할 연산을 나타냅니다. 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다. 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다. 첫 시도는 오름차순과 내림차..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/t84Mj/btq1yF8zU16/WUuZoJsyMBhPCwNTsz3XnK/img.png)
이전에 포스팅한 join() 메서드에서도 언급했듯, Thread는 Main 메서드의 순서와는 별개로 실행된다는 것이 장점이자 단점이다. 즉, 실행 속도에 따라 원치 않는 결과를 얻을 수도 있는 것이다. 간단한 예시로 한 은행 계좌에 두 명의 사람이 각각 입금과 출금을 한다고 가정하고 코드를 짜 보자. ○Bank.java package com.choonham; public class Bank { private int money = 10000; //현재 잔액 초기 값 public Bank() { // TODO Auto-generated constructor stub } /* 입금 처리 메서드 */ public void MoneyIn(int save) { int m = this.money; try { Thre..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/HCE5i/btq1qPj2Ie2/E3fY5jvYKw9I2BK9aT41Q1/img.png)
또, 예시가 1개뿐인 문제를 만났다. 상당히 복잡해 보이는 문제지만, 대기 시간이 0인 작업을 먼저 처리해주고 그다음에 작업 시간이 짧은 작업 순으로 처리하여 평균 시간을 구하면 풀릴 줄 알았다... package com.choonham; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; class Solution { public int solution(int[][] jobs) { int disk = 0; int sum = 0; int answer = 0; List tempArray = new ArrayList(); PriorityQueue pq = new..
스레드는 기본적으로 메인과 따로 작동을 하기 때문에 Main 안에 어떤 순서로 스레드를 놓아도 따로따로 실행이 된다. 그러나 특정 데이터 값의 연산이나 특정 작업을 각 스레드가 모두 종료된 뒤에 실행되게끔 만드려면, 각각의 스레드가 모두 종료될 때까지 대기하다 Main을 끝마쳐야 한다. 이럴 때 사용하는 메서드가 바로 join() 메서드이다. ARS로 모금을 진행하는 간단한 예제로 이해해보자. ○Account: package com.choonham; public class Account { //모금함 private int total = 0; public Account() { } public void deposit() { this.total = this.total + 1000; } public int ge..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/buXIRW/btq1qNsX7Xm/iAZDZS5Tv2nKUMn7UwnoEK/img.png)
각 스레드 객체를 생성한 뒤 어느 스레드를 우선으로 실행할 지 지정해줄 수 있다. 그러나, 예시에서 사용할 코드는 각각 스레드의 작업량이 그렇게 많지 않아서 뚜렷한 우선순위 차이를 보기는 힘들다. 그냥 priority 를 이렇게 지정하는구나...라고 생각하면 될 거 같다. ○PriorityThread: package com.choonham; public class PriorityThread extends Thread { public PriorityThread() { // TODO Auto-generated constructor stub } public void run() { int i = 0; System.out.println(this.getName() + "[우선권:" + this.getPriority..
주먹구구식으로 Spigot 플러그인을 제작할 때, 항상 Runnable 인터페이스를 잘 사용을 못해서, HashMap으로 스킬 쿨타임 들을 구현했던 기억이 난다. (뭐, 지금 생각해도 Map이 더 효율적인 방법이긴 하지만...ㅎ) 아무리 여러 블로그에 있는 포스팅들을 읽어봐도 Multi Threads 로 제 각각의 타이머를 만드는 개념이 이해가 잘 안 됐었다. 그래서 다루는 김에 간단히 1분을 세는 타이머를 구현한 방법을 적어볼까 한다. ○RunnableTest: package com.choonham; public class RunnableTest implements Runnable { int count = 0; int num = 0; boolean timeOut = false; public Runnab..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/ChomA/btq1s3IIWFJ/Mqd64g8znpEAUEYY9R1q2k/img.png)
오늘은 Heap의 LV3 문제를 하나 푸려고 프로그래머스에 접속을 했는데, 평소에는 보이지도 않던 실력 체크라는 탭이 눈에 들어왔다. ㅎㅎ... 코테 문제를 풀기 시작한 지 이제 2주 정도 접어들었는데, 내 실력은 어느 수준일까? 한번 확인해보고 싶기도 하고, 괜한 호기심이 생겨서 가볍게 LV1부터 풀어보기로 했다. 1번 문제: 복잡해 보이지만, 사실 들어오는 입력 배열에서 중복 값을 제거한 포켓몬 종류의 수가 (입력 배열 / 2)의 값보다 큰 지 비교하여 출력 값을 결정해주면 되는, 짜는데 3분도 안 걸리는 아주 간단한 문제이다. 나는 HashSet을 이용하여 중복 값을 전부 제거한 뒤, 비교하는 과정을 진행했다. package com.choonham; import java.util.HashSet; c..
- 인천 구월동 이탈리안 맛집
- react
- 정보보안기사 #실기 #정리
- 이탈리안 레스토랑
- Promise
- 파니노구스토
- react-native
- 맛집
- javascript
- AsyncStorage
- await
- redux-thunk
- Async
- redux
- 인천 구월동 맛집
- Total
- Today
- Yesterday