목차
< 기본적인 문장 단축키 >
1. public static void main(String[] args){} 자동 생성
psvm + enter > 단축키
2. System.out.println() 자동 생성
sout + enter
< 자바 입출력 >
(+ 클래스 이름은 Main)
1. 입력
총 3가지의 방법이 있다.
Scanner, BufferedReader, StringTokenizer
입력 처리 속도 : (빠름) BufferedReader > StringTokenizer > Scanner (느림)
BufferedReader, StringTokenizer은 문자열로 활용하기 위해 사용한다.
주로 BufferedReader를 사용한다.
(1) Scanner
Scanner sc=new Scanner(System.in); // 표준입력 System.in으로부터 스캐너를 만들어 데이터를 읽어온다.
// a = sc.nextInt(); // int 변수 1개 입력받는 예제
// b = sc.nextDouble(); // double 변수 1개 입력받는 예제
// g = sc.nextByte(); // char 변수 1개 입력받는 예제
// var = sc.next(); // 문자열 1개 입력받는 예제
// AB = sc.nextLong(); // long 변수 1개 입력받는 예제
# 1 2 3 4 5 입력받기
int[] A=new int[5];
for(int i=0; i<5; i++) A[i]=sc.nextInt();
(2) BufferedReader
참고로, BufferedReader는 Enter만 경계로 인식하고, 받은 데이터는 String으로 입력 받는다.
따라서 가공을 해야하고, 예외처리를 해줘야한다.
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readline();
int num=Integer.parseInt(br.readline());
}
(3) StringTokenizer
: 하나의 문자열을 여러 개의 토큰으로 분리한다.
StringTokenizer은 공백이 있을 때 공백처리를 땡겨서 채우도록 도와준다.
public static void main(String[] args) throws IOException {
String test="Hello world";
StringTokenizer tokenTest=new StringTokenizer(test);
// for문으로 모든 값 출력
}
ex) 숫자 배열 입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] array=new int[5][5];
for (int i = 0; i < 5; i++) {
StringTokenizer st=new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
array[i][j]=Integer.parseInt(st.nextToken()); // 숫자 배열에 넣는 법
}
}
ex) 문자 배열 입력받기 (띄어쓰기 x)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[][] bombArray=new char[n][n];
for (int i = 0; i < n; i++) {
bombArray[i]=br.readLine().toCharArray();
}
문자열을 쪼개서 char 타입의 배열에 넣어주는 메서드 => toCharArray()
(아래 부분에 자세한 설명이 있음)
ex) 문자 배열 입력받기 (띄어쓰기 o)
String[] fingerLoc = br.readLine().split(" ");
int[] leftLoc=keyboard.get(fingerLoc[0].charAt(0));
int[] rightLoc=keyboard.get(fingerLoc[1].charAt(0));
ex) 2차원 배열 입력받기 (Scanner)
char은 sc.next().charAt(0)으로 입력 받는다.
public static void main(String[] args) {
int answer=0;
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
int n=sc.nextInt();
char[][] array=new char[n][n];
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
array[i][j]=sc.next().charAt(0); // char 입력받는 방법
}
}
}
// 테케횟수와 격자크기n, 이차원 배열 입력받기
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int test_case=sc.nextInt();
for(int t=1; t<test_case+1; t++) {
int n=sc.nextInt();
char[][] array=new char[n][n];
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
array[i][j]=sc.next().charAt(0); // char 입력받는 방법
}
}
2. 출력
(1) System.out.print()
- 형식에 구애받지 않는 형태로 출력하고자 할 때 사용
- 줄바꿈 문자는 포함 x
(1.1) System.out.println()
- 형식에 구애받지 않는 형태로 출력하고자 할 때 사용
- 줄바꿈 문자 포함 o
(1.2) System.out.printf()
- 형식을 신경써야 할 때 사용
- 줄바꿈 문자 포함 x
(2) BufferWriter
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("#"+test_case+" "); // 쓰기
bw.write("\n"); // 엔터
bw.close(); // stream 닫기
사용법 참고 출처 : https://eboong.tistory.com/578
< 배열 >
(1) 배열 생성
int 타입의 자료 3개를 저장할 수 있는 배열을 메모리에 생성한다. : new int[3]
// 1차원 배열
int[] arr = new int[3];
// 2차원 배열
int[][] arr= new int[3][3];
(2) 배열 출력하기 (for문 사용x)
// Arrays.toString(배열명)
System.out.println(Arrays.toString(selectNum)); // 배열 내용 출력하기
(3) 문자열을 쪼개서 char 타입 배열에 값 넣기 (toCharArray)
: 문자열을 쪼개서 char 타입의 배열에 넣어주는 메서드
문자열 -> char 타입의 배열
String s1="hello world";
char[] s1Arr=s1.toCharArray();
char 타입의 배열 -> 문자열
String s2=new String(s1Arr);
(4) 배열 및 문자열 길이
int num = array.length;
(5) 8방향 delta 배열
// 상,상우,우,우하,하,좌하,좌,좌상
int[][] delta= {
{-1,0},
{-1,1},
{0,1},
{1,1},
{1,0},
{1,-1},
{0,-1},
{-1,-1}
};
(6) 배열 정렬 기준 변경
-> 1. 람다식 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package day_0816; import java.util.Arrays; import java.util.Scanner; public class ComparatorTest { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[][] persons= new int[3][2]; for (int i = 0; i < 3; i++) { int age=sc.nextInt(); int budget=sc.nextInt(); persons[i][0]=age; persons[i][1]=budget; } Arrays.sort(persons,(o1,o2) -> o2[0]-o1[0]); // 나이순 내림차순 for (int i = 0; i < persons.length; i++) { System.out.println(persons[i][0]+ " , " + persons[i][1]); } System.out.println("__________________________"); Arrays.sort(persons,(o1,o2) -> o1[0]-o2[0]); // 나이순 오름차순 for (int i = 0; i < persons.length; i++) { System.out.println(persons[i][0]+ " , " + persons[i][1]); } } } /* 입력값 예 15 30 15 14 22 19 */ | cs |
-> 2. compareTo, compare 이용방법
https://eboong.tistory.com/609
< ArrayList >
(1) 배열 생성 ( ArrayList 안에 int[] 배열)
// 1차원 배열
ArrayList<Integer> a = new ArrayList<>();
// 2차원 배열 (입력형식 : 정수) (N x N)
ArrayList<Integer>[] array = new ArrayList<>();
for(int i=0; i<N; i++){
array[i]=new ArrayList<>();
[[],[],[],[],[]]
// 2차원 배열 (입력형식 : int[])
ArrayList<int[]>[] map= new ArrayList[N+1];
for (int i = 0; i <= N; i++) {
map[i]=new ArrayList<>(); // 열
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
int c=Integer.parseInt(st.nextToken());
map[a].add(new int[] {b,c});
map[b].add(new int[] {a,c});
}
(2) 배열 생성 (ArrayList 안에 ArrayList)
static ArrayList<ArrayList<Integer>> map;
public static void main(String[] args) throws IOException {
map=new ArrayList<>();
for (int i = 0; i < 3; i++) {
map.add(new ArrayList<Integer>()); // 빈 리스트 생성
}
}
(3) 배열 생성 (ArrayList 안에 class 타입)
static class Point implements Comparable<Point>{
int x,y,c;
public Point(int x, int y, int c) {
super();
this.x = x;
this.y = y;
this.c = c;
}
@Override
public int compareTo(Point o) {
return this.c!=o.c? this.c-o.c : o.c-this.c;
}
}
ArrayList<Point> array= new ArrayList<>();
array.add(new Point(nx, ny));
(4) 배열에 값 넣기
// 1차원 배열
for(int j=0; j<N; j++){
array.add(값);
}
// 2차원 배열
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
array[i].add(값);
}
}
< 스택 (Stack) >
(1) 스택 선언
// 1. 스택 선언
Stack<Interger> stack= new Stack()<>;
(2) 데이터 추가
//2. 데이터 추가
stack.push(x);
(3) 데이터 삭제
//3. 데이터 삭제
stack.pop();
(4) 스택 맨 앞에 있는 값 확인하기
stack.peek();
(5) 스택의 사이즈 확인하기
stack.empty();
(6) 스택에서 값 찾기
stack.contains(x); // 값이 있다면 true, 없다면 false
< 큐 (Queue) >
(1) 큐 선언
// 1. 큐 선언
Queue<Integer> queue= new ArrayDeque()<>; // 성능에 더 유리하다.
Queue<Interger> queue= new LinkedList()<>;
(2) 데이터 추가 (맨 뒷부분에 값 삽입)
// 2. 큐 데이터 추가 (맨 뒤에 값 삽입)
// 2.1 add() : 문제 발생시 에러 발생
queue.add(1);
// 2.2 offer() : 문제 발생시 false 반환
queue.offer(1);
(3) 데이터 삭제 (맨앞에 있는 값)
// 3. 큐 데이터 삭제 (맨앞에 있는 값 반환 후 삭제)
// 3.1 remove() : 문제 발생시 에러 발생
queue.remove()
// 3.2 poll() : 문제 발생시 null 반환
queue.poll()
// 3.3 clear() : 큐 비우기
queue.clear();
(4) 큐 맨 앞에 있는 값 확인하기
// 4. 큐 맨 앞의 값 확인하기
// 4.1 element() : 문제 발생시 에러 발생
queue.element()
// 4.2 peek() : 문제 발생시 null 반환
queue.peek()
(5) 큐의 사이즈 확인하기
queue.size();
(6) 큐에서 원하는 값 찾기
queue.contains(x); // 값이 있다면 true, 없다면 false
// 1. 큐 선언
Queue<Interger> queue= new LinkedList()<>;
// 2. 큐 데이터 추가 (맨 뒤에 값 삽입)
// 2.1 add() : 문제 발생시 에러 발생
queue.add(1);
// 2.2 offer() : 문제 발생시 false 반환
queue.offer(1);
// 3. 큐 데이터 삭제 (맨앞에 있는 값 반환 후 삭제)
// 3.1 remove() : 문제 발생시 에러 발생
queue.remove()
// 3.2 poll() : 문제 발생시 null 반환
queue.poll()
// 3.3 clear() : 큐 비우기
queue.clear();
// 4. 큐 맨 앞의 값 확인하기
// 4.1 element() : 문제 발생시 에러 발생
queue.element()
// 4.2 peek() : 문제 발생시 null 반환
queue.peek()
// 5. 큐 사이즈 확인
queue.size()
< 우선순위 큐 (Priority Queue) >
(1) 우선순위 큐 선언
// 1. 우선순위가 낮은 숫자 순
PriorityQueue<Integer> queue=new PriorityQueue<>();
// 2. 우선순위가 높은 숫자 순
PriorityQueue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());
참고 자료
https://eboong.tistory.com/579?category=1019810
(2) 우선순위 큐 정렬기준 변경
PriorityQueue<int[]> pQueue=new PriorityQueue<>((o1,o2)->o1[1]-o2[1]);
<문자열>
(1) 문자열 분리
sc.useDelimiter("-");
Scanner를 사용할 때
입력 자체에서 알아서 특정 문자/문자열 단위로 잘라서 받을 때
useDelimiter를 사용한다.
public class Main {
public static void main(String[] args) {
// Your Program Goes Here
Scanner sc = new Scanner(System.in);
sc.useDelimiter("-");
}
}
(2) 문자열 수정하기
str.substring문자열 자르기 메서드인 substring을 이용하여문자열을 수정한다.
String str="hello"; // hEllo
str=str.substring(0,1) + "E" + str.substring(2);
substring(int idx)
> idx 위치부터 이후의 모든 문자열을 리턴
substring(int idx,int idx2)
> idx 위치부터 idx2-1까지의 문자열을 리턴
(3) 아스키코드
문자 -> 숫자
char c='a';
int num=(int)c;
숫자 -> 문자
int num=65;
char c=(char)num;
현재 알파벳의 바로 전 알파벳 출력하기
char c=sc.next().charAt(0);
System.out.print((char)(c-1));
(4) 대소문자 바꾸기
for(int i = 0; i < len; i++) {
if(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {
System.out.print((char)(str.charAt(i) - 'A' + 'a'));
}
else {
System.out.print((char)(str.charAt(i) - 'a' + 'A'));
}
}
(5) 문자열 모든 공백 제거
: replaceAll(" ", "") 메서드 사용하기
public static void main(String[] args) {
String s1= " Hi, How are you?";
s1=s1.replaceAll(" ", "") ;
char[] s1Arr=s1.toCharArray();
for (int i = 0; i < s1Arr.length; i++) {
System.out.println(s1Arr[i]);
}
}
<Map>
(1) Map 선언
// Map<키 type, 값 type>
Map<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
(2) Map에 해당 키가 있는지 확인하는 함수 : containsKey()
map.containsKey(키값); // -> 있으면 true, 없으면 false 반환
(3) Map 전체출력
entrySet : key와 value 값이 모두 필요한 경우 사용
keySet() : key값만 필요한 경우 사용
(4) Map 자동정렬
: TreeMap은 put 메서드를 사용해 값을 저장하면 자동으로 정렬을 진행함
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class n20291 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
Map<String,Integer> map=new TreeMap();
for (int i = 0; i < n; i++) {
String temp=br.readLine(); // 한줄 입력받기
temp=temp.substring(temp.indexOf(".")+1); // 확장자만 떼어내기
if(map.get(temp)==null) { // 아직 딕셔너리에 해당 확장자가 저장이 안되어 있는 경우 = 초기화
map.put(temp, 1);
}else { // 이미 해당 확장자가 키값으로 딕셔너리에 존재하는 경우
map.put(temp, map.get(temp)+1);
}
}
for (Map.Entry<String, Integer> element : map.entrySet()) {
System.out.println(element.getKey()+ " " + element.getValue());
}
}
}
// 백준 파일정리 20291번
< char -> int로 변환>
char를 int로 변환하는 가장 간단한 방법은
문자 '0'을 이용하는 것이다.
char num='9';
int newNum=num-'0'; // 57-48=9
< int -> char 로 변환>
int num=3;
char c=(char)num;
< string -> int 로 변환 >
String a="3";
int num=Integer.parseInt(a);
< int -> string로 변환 >
int num=3;
String s=String.valueOf(num);
<가독성이 개선된 반복문>
배열 및 collections에서 주로 사용되는 반복문이다.
인덱스 대신 직접 요소에 접근하는 변수를 제공한다.
int[] intArr={1,2,3,4,5};
for(int x:intArr){
System.out.println(x);
}
<최댓값, 최솟값 구하기>
최댓값 : Integer.MAX_VALUE
최솟값 : Integer.MIN_VALUE
int min=Integer.MAX_VALUE;
int max=Integer.MIN_VALUE;
int[] nums={1,2,3,4,10,9,8};
for(int num:nums){
if (num>max){
max=num;
}
if (num<min){
min=num;
}
}
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[20546] 기적의 매매법 in Java (0) | 2022.07.29 |
---|---|
[SWEA] 1961. 숫자 배열 회전 in Java (0) | 2022.07.11 |
[SWEA] 2001. 파리 퇴치 in python (0) | 2022.07.11 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 in Java (0) | 2022.07.11 |
[SWEA] 1959. 두 개의 숫자열 in JAVA (0) | 2022.07.08 |