알고리즘 공부

코테 벼락치기(코테 요약)

송테이토 2022. 12. 22. 23:59

코테 보기전에 휙 보려고 정리했던 글들

 

#해시를 사용한 집합과 맵 hash_set

오름차순

HashSet<String> set = new HashSet<>();

ArrayList<String> list = new ArrayList<>();

// 오름차순
Collections.sort(list);

//내림차순
Collections.sort(list, Collections.reverseOrder()); 

// 대소문자 구분없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
  • HashMap과 HashSet의 차이

HashMap은 중복 Key 값을 허용하지 않지만, 중복 Value 값은 허용한다.

ex. {'a': 1, 'b': 1, 'c': 2}

HashSet은 객체 자체를 데이터로 저장하기 때문에 중복을 허용하지 않는다.

ex. {'a', 'b', 'c'}

+HashMap이 HashSet보다 빠르다.

HashMap 값 추가

map.put(1,"사과"); //값 추가
map.remove(1); //key값 1 제거
map.clear(); //모든 값 제거

System.out.println(map); //전체 출력 : {1=사과, 2=바나나, 3=포도}
System.out.println(map.get(1));//key값 1의 value얻기 : 사과

숫자인지 아닌지 판단하기

Character.isDigit()

public static boolean isString(String question) {
		for (int i = 0; i < question.length(); i++) {
			if (Character.isDigit(question.charAt(i))) {
				return true;
			}
		}
		return false;
	}
		try {
            Double.parseDouble(s);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }

스택 push,pop 큐 offer,poll

  1. push() : 큐 맨 뒤에 데이터 추가 = enequeue
  2. pop() : 큐 맨 앞의 데이터 제거 = dequeue
  3. front() : 큐 제일 앞에 있는 값을 반환
  4. back() : 큐 제일 뒤에 있는 값을 반환
  5. size() : 큐에 저장된 데이터 갯수를 반환
  6. empty() : 큐가 비어있으면 true, 아닐 경우 false를 반환

큐명.메소드() 형태로 사용한다.

2차원 배열 오름차순 정렬

  1. 문자열일때
//사람의 정보를 입력받는 2차원 배열 선언
		String[][] info = new String[N][2];
		for(int i=0; i<N; i++){
			st = new StringTokenizer(br.readLine());
			info[i][0]= st.nextToken();
			info[i][1]= st.nextToken();
		}
		
		// 오름차순으로 정렬하기
		Arrays.sort(info, new Comparator<String[]>() {
			public int compare(String[] o1, String[] o2) {
				// 이름이 같으면 큰 키로 오름차순
				if (o1.length == o2.length) {
					return o1.length; // 사전 순 정렬
				} else {
					return o1.length - o2.length;
				}
			}
		});
  1. 숫자일 때
// 함수형 인터페이스 Comparator 의 메서드 compare(e1,e2)
		// 양수 반환 -> e1 인덱스 1 e2 인덱스 0
		// 음수 반환 -> e1 인덱스 -1 e2 인덱스 0
		Arrays.sort(xy, new Comparator<int[]>() {

			@Override
			public int compare(int[] x1, int[] x2) {

				// 만약 y좌표 같으면
				if (x1[1] == x2[1]) {
					return x1[0] - x2[0]; // x 오름차순
				} else {
					return x1[1] - x2[1];
				}
			}

		});

1차원 배열 내림차순

Arrays.sort(numbers, Collections.reverseOrder());

펠린드롬수

String str = br.readLine();
StringBuilder sb = new StringBuilder(str);

if (str.equals(sb.reverse().toString())) {
            System.out.print(1);
        } else {
            System.out.print(0);
        }

문자열 바꾸기

string = "My favorite song is snowman by sia"

# string.replace(문자열1, 문자열2)
# 문자열1을 문자열2로 변환

# My favorate song as snowman by saa
string.replace("i", "a")

# 삭제할 수도 있다
# My favorite  is snowman by sia
string.replace("song", "")

# 공백 삭제
# Myfavoritesongissnowmanbysia
string.replace(" ", "")

소수구하기 -에라토스테네스의 체

boolean[] prime = new boolean[N + 1];
		// 1은 소수가 아니므로 제외
		prime[0] = prime[1] = true;

		for (int i = 2; i <= N; i++) {
			if (prime[i] == true) // 소수가 아니라면 계속!
				continue; // 소수가 아니라면 continue

			for (int j = 2 * i; j <= N; j += i)
				prime[j] = true; // 소수의 배수는 소수를 약수로 가지므로 제외
		}

		// 소수 개수 구하기
		for (int i = M; i <= N; i++) {
			if (!prime[i])
				sb.append(i).append("\\n");
		}

switch (order) {
			case "push_front": //정수 X를 덱의 앞에 넣는다.
				deque.offerFirst(Integer.parseInt(st.nextToken()));
				break;
			case "push_back": //정수 X를 덱의 뒤에 넣는다.
				deque.offerLast(Integer.parseInt(st.nextToken()));
				break;
			case "pop_front": // 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
				sb.append(deque.isEmpty() ? -1 : deque.removeFirst()).append("\\n");
				break;
			case "pop_back": // 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
				sb.append(deque.isEmpty() ? -1 : deque.removeLast()).append("\\n");
				break; 
			case "size"://덱에 들어있는 정수의 개수를 출력한다.
				sb.append(deque.size()).append("\\n");
				break;
			case "empty"://덱이 비어있으면 1을, 아니면 0을 출력한다.
				sb.append(deque.isEmpty() ? 1 : 0).append("\\n");
				break;
			case "front": //덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1
				sb.append(deque.isEmpty() ? -1 : deque.peekFirst()).append("\\n");
				break;
			case "back": //덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1
				sb.append(deque.isEmpty() ? -1 : deque.peekLast()).append("\\n");
				break;

진수변환

// 10진수 -> N진수
Integer.toString(num, N진수);

//N진수 -> 10진수
nteger.parseInt(str, N진수);
int num2 = Integer.parseInt(num2Str, 2); //2진수 문자열