java
백준 - 4097. 수익
알고리즘과 자바에 대해 다시 상기시키고 싶어서 다시 PS를 시작하고자 한다. 4097. 수익https://www.acmicpc.net/problem/4097 문제 설명첫째 줄에 N, 둘째 줄부터 N개의 줄엔 수익 P가 주어진다. 범위는 N은 250,000까지, P는 -10,000 ~ 10,000까지이다.다만 테스트 케이스 개수는 정해지지 않아서 O(N)에 구현하는 것을 목표로 고민했다. 접근 1구간에 대해 가장 큰 값을 구하는 것은 어렵지 않았다. 합이 음수가 되는 순간 가장 큰 값이 아니게 되기 때문이다.고민했던 부분은 구간이 비어있으면 안 된다는 조건이다. 반목문을 통해 값을 더해갔는데, 최초 값을 반복문 밖으로 빼서 받을지, 첫 입력인지에 대한 Flag를 둘지 고민했고, 후자로 결정했다. 풀이 코..
백준 - 14938. 서강그라운드
반례를 생각하지 못해서 해결하는데 한 시간이 넘는 시간이 걸려 내용을 정리하고자 한다. 14938. 서강그라운드https://www.acmicpc.net/problem/14938 문제 입출력 설명item의 개수와 가중치가 있는 그래프가 주어진다.한 node에서부터 가중치의 합이 r 이내인 node들의 item의 합을 구하는 문제이다. 접근아래 방법으로 풀었다.각 node마다 거리가 r 이하인 node를 visited true로 변경visited가 true인 node의 item 값을 더함자꾸 9%에서 틀려서 오래 고민했다가 해결했다. 우선순위 큐를 활용해 거리가 짧은 node부터 방문하도록 구현했는데 visited를 활용해 한 번 접근한 node는 다시 접근하지 않도록 구현한 것이 문제였다. 그래프의 ..
백준 - 9663. N-Queen
백트래킹 문제 중 완전 기출이기에 적어보고자 한다.9663. N-Queenhttps://www.acmicpc.net/problem/9663 문제 입출력 설명N에 맞게 board를 생성하고 N개의 Queen을 서로 공격하지 않도록 배치하는 경우의 수를 구하면 된다.예를 들어 아래와 같이 배치하면 성공이다. 접근아래와 같이 윗 행부터 조건을 만족하는 곳들을 찾아 배치했다.사실 if문만 잘 구현하면 된다. 나는 이 부분에서 막혀서 구현에 생각보다 오랜 시간이 걸렸다. 풀이 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main..
Java - Short Circuit
Short Circuit(쇼트서킷)에 대해 알아보자. Short Circuit Short Circuit(쇼트서킷)은 짧은 순회라는 의미로 여러 개의 조건을 검색할 때 앞에서 답이 정해졌으면 뒤의 조건을 확인하지 않는 것이다. 아래는 Short Circuit 동작을 알 수 있는 예시이다. if문 조건으로 a == 0 이거나 ++a == 1인 경우 a의 값을 출력하도록 했다. public class Main { public static void main(String[] args) { int a = 0; if(a == 0 || ++a == 1) { System.out.println("result : " + a); } } } ++a 코드가 있음에도 불구하고 결과는 1이 아닌 0이다. 그 이유는 a == 0이 이..
Java - Formatter
깔끔한 코드 작성에 String.format()의 필요를 느껴 이와 관련된 내용을 공부하고자 한다. String Docs https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html String (Java SE 17 & JDK 17) All Implemented Interfaces: Serializable, CharSequence, Comparable , Constable, ConstantDesc The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instan..
Java - Collections unmodifiable
Java를 활용해 이것저것 만들다가 우연히 Collections 클래스의 unmodifiable 메서드를 알게 되었다. 자주 활용할 것 같아 간단히 정리하고자 한다. https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html Collections (Java Platform SE 8 ) Rotates the elements in the specified list by the specified distance. After calling this method, the element at index i will be the element previously at index (i - distance) mod list.size(), for all va..
Java - Java 배열
Java 배열에 대해 알아보자 배열 배열은 같은 타입의 변수 묶음이다. 아래와 같이 변수를 하나하나 생성하기엔 너무 비효율적이기에 이처럼 묶어서 한 번에 만든다. 배열의 크기는 한번 생성되면 변경할 수 없다. 배열 선언 배열 선언은 아래 2가지 방법으로 할 수 있다. 대괄호의 위치가 다르다. 자료형 배열이름[ ]; 자료형[ ] 배열이름; 보통 두 번째 방법을 많이 사용한다. 이때, 배열 선언은 데이터를 저장하는 공간이 생긴 것이 아닌 주소값을 저장하는 공간이 생긴 것이다. 배열 생성 배열을 선언한 후엔 생성을 해야 한다. 선언해 놓은 배열 이름에 맞게 생성하며 new 연산자를 이용한다. 아래 코드는 선언과 동시에 생성한 것으로, 좌항이 선언, 우항이 생성이다. 위 코드를 메모리 상에서 보면 아래와 같다...
Java - Java 조건문과 반복문
Java 조건문과 반복문에 대해 알아보자 if문 if if문은 조건문 중 하나로 아래의 형태로 사용한다. if(조건식) { ... } 만약 중괄호 내에 들어갈 코드가 한 문장이라면 중괄호를 생략할 수 있다. if(조건식) ... 이때, 조건식은 결과가 true 혹은 false이어야 하며, false면 중괄호 안의 코드가 실행되지 않는다. if-else true일 때와 false일 때를 구분해 동작시키고자 한다면 if-else문을 사용한다. if(조건식) { ... } else { ... } 만약 조건식이 true이면 위, false이면 아래 중괄호의 코드를 실행한다. else if 조건식을 여러 개 사용하고자 한다면 else if를 사용한다. if(조건식) { ... } else if(조건식) { .....