iterator 디자인 패턴에 제네릭 적용
package iterator.generic;
public interface Container<T> {
Iterator<T> getIterator();
}
package iterator.generic;
public interface Iterator<T> {
boolean hasNext();
T next();
}
package iterator.generic;
public class ContainerImpl<T> implements Container<T> {
// String[] strArray = {"Hello", "Iterator", "Pattern"};
T[] array;
public void setArray(T[] array) {
this.array = array;
}
@Override
public Iterator<T> getIterator() {
// Iterator interface 를 구현한 객체를 return
return new IteratorImpl();
}
private class IteratorImpl implements Iterator<T> {
int index; // default 0
@Override
public boolean hasNext() {
if (index < array.length) return true;
return false;
}
@Override
public T next() {
if (this.hasNext()) return array[index++];
return null;
}
}
}
package iterator.generic;
public class Test {
public static void main(String[] args) {
ContainerImpl<String> container = new ContainerImpl<>();
String[] strArray = {"Hello", "Iterator", "Pattern"};
container.setArray(strArray);
Iterator<String> iter = container.getIterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
ContainerImpl<Integer> container2 = new ContainerImpl<>();
Integer[] intArray = {1, 3, 4, 6, 7,};
container2.setArray(intArray);
Iterator<Integer> iter2 = container2.getIterator();
while (iter2.hasNext()) {
System.out.println(iter2.next());
}
}
}
별 찍기
package basic.star;
public class Star1 {
public static void main(String[] args) {
// 반복문 + 출력
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j < i) {
System.out.print(" ");
} else {
System.out.print("*");
}
}
System.out.println();
}
}
}
package basic.star;
public class Star2 {
public static void main(String[] args) {
// 반복문 + 출력 + 반전 시점
// 반전 : 정확히 반인 곳에서 공백 기준으로 점점 증가? 점점 감소? 판단 <= 밑으로 가면서
// 옆으로(열) 가면서 공백 출력 나머지 조건 (전체 7 중 공백 뺀 만큼)
int turnCnt = 7 / 2; // 3.5 x 3 으로 정수 처리
int spaceCnt = 0;
boolean spaceIncrease = true; // 공백문자 수 증가?? 감소??
for (int i = 0; i < 7; i++) {
// 1. 출력하지 않을 부분까지 따진다.
// for (int j = 0; j < 7; j++) {
// if (j < spaceCnt) {
// System.out.print(" ");
// } else if (j < 7 - spaceCnt) {
// System.out.print("*");
// }
// }
// 2. 출력할 부분까지만 따진다.
// for (int j = 0; j < 7 - spaceCnt; j++) {
// if (j < spaceCnt) {
// System.out.print(" ");
// } else {
// System.out.print("*");
// }
// }
// 3. 앞 공백, 뒤 별 출력 순서가 명백하므로 for 문 분리해서 if 조건 체크 제거
for (int j = 0; j < spaceCnt; j++) {
System.out.print(" ");
}
for (int j = spaceCnt; j < 7 - spaceCnt; j++) {
System.out.print("*");
}
System.out.println();
// 행 별 출력이 완료 => 공백 증가 감소 판단
if (spaceIncrease) {
spaceCnt++;
} else {
spaceCnt--;
}
if (spaceCnt == turnCnt) { // 다음 행부터 감소로 변경
spaceIncrease = false;
}
}
// 나의 풀이
// int n = 7;
// int mid = n / 2;
//
// for (int i = 0; i <= n / 2; i++) {
// for (int j = 0; j < i; j++) {
// System.out.print(" ");
// }
// for (int k = 0; k < n - 2 * i; k++) {
// System.out.print("*");
// }
// System.out.println();
// }
// for (int i = mid - 1; i >= 0; i--) {
// for (int j = 0; j < i; j++) {
// System.out.print(" ");
// }
// for (int k = 0; k < n - 2 * i; k++) {
// System.out.print("*");
// }
// System.out.println();
// }
}
}
Scanner
package basic.input;
import java.util.Arrays;
import java.util.Scanner;
//Scanner : 편하다. 다소 무겁다.
public class ScannerTest {
public static void main(String[] args) {
// 1 2 3 4 5
// {
// Scanner sc = new Scanner(System.in);
// int[] input = new int[5];
//
// for (int i = 0; i < 5; i++) {
// input[i] = sc.nextInt();
// }
//
//// for (int i = 0; i < 5; i++) {
//// System.out.println(input[i]);
//// }
// System.out.println(Arrays.toString(input));
//// sc.close();
// }
// 1 A 3 B 5
// {
// Scanner sc = new Scanner(System.in);
// char[] input = new char[5];
//
// for (int i = 0; i < 5; i++) {
// input[i] = sc.next().charAt(0); // "1", "2" ...
// }
//
// System.out.println(Arrays.toString(input));
// }
// XYZQU
// {
// Scanner sc = new Scanner(System.in);
// char[] input = sc.nextLine().toCharArray();; // "XYZQU" -> ['X', 'Y',..]
//
// System.out.println(Arrays.toString(input));
// }
/*
6
1 2 3 4 5 1
*/
// {
// Scanner sc = new Scanner(System.in);
// int N = sc.nextInt();
// int[] input = new int[N];
//
// for (int i = 0; i < N; i++) {
// input[i] = sc.nextInt();
// }
// System.out.println(Arrays.toString(input));
// }
/*
5
XYZQU
*/
{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine(); // 남아 있는 빈 개행문자('\n')를 처리
// int[] input = new int[N]; // 낭비
char[] input = sc.nextLine().toCharArray();; // "XYZQU" -> ['X', 'Y',..]
System.out.println(Arrays.toString(input));
}
}
}
BufferedReader
package basic.input;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BufferedReaderTest {
public static void main(String[] args) throws Exception {
// 1 2 3 4 5
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String str = br.readLine();
// // 문자열을 전달해서 StringTokenizer 가 개별 문자열로 쪼갤 준비를 하게 된다.
// StringTokenizer st = new StringTokenizer(str);
//
// int[] input = new int[5];
// for (int i = 0; i < 5; i++) {
// input[i] = Integer.parseInt(st.nextToken()); // "1" -> 1, "2" -> 2...
// }
// System.out.println(Arrays.toString(input));
// }
// 1 A 3 B 5
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String str = br.readLine();
// // 문자열을 전달해서 StringTokenizer 가 개별 문자열로 쪼갤 준비를 하게 된다.
// StringTokenizer st = new StringTokenizer(str);
//
// char[] input = new char[5];
// for (int i = 0; i < 5; i++) {
// input[i] = st.nextToken().charAt(0); // "1" -> '1', "2" -> '2'...
// }
// System.out.println(Arrays.toString(input));
// }
// XYZQU
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//// String str = br.readLine();
//// char[] input = str.toCharArray();
// char[] input = br.readLine().toCharArray();
//
// System.out.println(Arrays.toString(input));
// }
/*
6
1 2 3 4 5 1
*/
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// int N = Integer.parseInt(br.readLine());
// int[] input = new int[N];
// StringTokenizer st = new StringTokenizer(br.readLine());
//
// for (int i = 0; i < N; i++) {
// input[i] = Integer.parseInt(st.nextToken());
// }
//
// System.out.println(Arrays.toString(input));
// }
/*
5
XYZQU
*/
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// int N = Integer.parseInt(br.readLine()); // N
// char[] input = br.readLine().toCharArray();
//
// System.out.println(Arrays.toString(input));
// }
/*
5
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5
*/
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// int N = Integer.parseInt(br.readLine());
// System.out.println(N);
//
// int[][] input = new int[N][N];
// for (int i = 0; i < N; i++) { // 행
// StringTokenizer st = new StringTokenizer(br.readLine());
// for (int j = 0; j < N; j++) { // 열
// input[i][j] = Integer.parseInt(st.nextToken());
// }
// }
// for (int i = 0; i < N ; i++) {
// System.out.println(Arrays.toString(input[i]));
// }
// }
/*
3 5
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5
*/
// {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer st = new StringTokenizer(br.readLine()); // "3 5"
// int N = Integer.parseInt(st.nextToken()); // 3
// int M = Integer.parseInt(st.nextToken()); // 5
//
// System.out.println(N);
//
// int[][] input = new int[N][M];
//
// for (int i = 0; i < N; i++) { // 행
// st = new StringTokenizer(br.readLine());
// for (int j = 0; j < M; j++) { // 열
// input[i][j] = Integer.parseInt(st.nextToken());
// }
// }
// for (int i = 0; i < N ; i++) {
// System.out.println(Arrays.toString(input[i]));
// }
// }
/* 첫 줄에 테스트 케이스 개수 (3), 둘째줄부터 테스트케이스, 각 테스트케이스는 첫 줄에 N, M, 이어지는 N개의 줄에 M개의 수가 주어진다.
* 삼성 준비하려면 알아야 한다.
3
2 2
1 2
6 7
3 5
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5
2 1
8
9
*/
{
// 1. 디버거를 적극적으로 활용하자.
// 2. 파일 입력을 적극적으로 활용하자.
System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] input = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
input[i][j] = Integer.parseInt(st.nextToken());
}
}
// 출력
System.out.println(t);
for (int i = 0; i < N; i++) {
System.out.println(Arrays.toString(input[i]));
}
}
}
}
}
Array
Basic
package basic.array;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Array_01_Basic {
public static void main(String[] args) {
// "abbcccddddeeeeeffffggghhiabbcccddddeeeeeffffggghhi"
// 위 문자열 중 각 알파벳 문자의 사용 횟수 (빈도수)
// a ~ z 까지 모든 알파벳의 사용 횟수를 출력하세요.
// 변수 26개, 26가지의 경우 처리??
// int[] alphaCnt = new int[26]; // alphaCnt[0] = a, alphaCnt[1] = b,....
// String str = "abbcccddddeeeeeffffggghhiabbcccddddeeeeeffffggghhi";
// int strLen = str.length();
// for (int i = 0; i < strLen; i++) {
// alphaCnt[str.charAt(i) - 'a']++;
// }
//
// for (int i = 0; i < 26; i++) {
// System.out.println((char) (i + 'a') + " " + alphaCnt[i]);
// }
// 배열의 맨 앞부터 각 3리씩 일정한 규칙이 있다. 앞 * 중 = 뒤
// 규칙에 위반되는 쌍이 몇 개인지 출력
// {
// int[] intArray = {3,2,6, 3,4,4, 1,4,2, 2,3,6, 1,3,5, 1,5,1, 1,1,1, 2,4,2, 2,2,4};
//
// int wrongCnt = 0;
// int intLength = intArray.length - 2;
//
// for (int i = 0; i < intLength; i = i + 3) {
// // i, i+1, i+2 세 항목 따진다.
// if (intArray[i] * intArray[i + 1] != intArray[i + 2]) wrongCnt++;
// }
// System.out.println(wrongCnt);
// }
// "XYZEBFFGQOVVPWGFFCEAYX"
// --> <--
// 좌우 비대칭 문자가 있으면 출력, 전체 비대칭 문자가 몇 개인지 출력
// 문자열의 길이는 짝수 보장
{
String str = "XYZEBFFGQOVVPWGFFCEAYX";
char[] chArray = str.toCharArray();
int wrongCnt = 0;
int center = chArray.length / 2;
for (int l = 0, r = chArray.length - 1; l < center; l++, r--) {
if (chArray[l] != chArray[r]) {
System.out.println(chArray[l] + " " + chArray[r]);
wrongCnt++;
}
}
System.out.println(wrongCnt);
}
}
}
Circular
package basic.array;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Array_02_Circular {
public static void main(String[] args) {
char[] input = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
int n = input.length;
// for (int i = 0; i < n; i++) {
// System.out.print(input[i]);
// }
// 예외 발생
// for (int i = 0; i < n * 2; i++) {
// System.out.print(input[i]);
// }
// System.out.println();
// for (int i = 0; i < n * 2; i++) {
// System.out.print(input[i % n]);
// }
// System.out.println();
// 반복 횟수를 정확히 알 수 없을 때
int count = 0;
int finish = 20;
int i = 0;
while(true) {
if (count == finish) break;
System.out.print(input[i % n]);
count++;
i++;
}
}
}