[Algorithm] Java C++ 문법 비교 정리

YUNU·2024년 5월 2일

알고리즘

목록 보기
15/15
post-thumbnail

🤖 Algorithm


🟦 Java C++ 문법 비교 정리

항상 C++로 알고리즘 문제를 풀다가 백엔드 파트는 Java로 언어 제한을 둔 코딩테스트를 보게되어 문법 정리를 했다.

🔷 입출력

  • [Java] BufferedReader & BufferedWriter <-> [C++] cin & cout

    
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.OutputStreamWriter;
    import java.io.BufferedWriter;
    import java.io.IOException;
    
    public class MainClass {
    	public static void main(String args[]throws IOException) {
          BufferedReader br = new BufferedReader(new InputStreamReader(Sytem.in));
          // readLine은 string 타입으로 받아옴
          int num = Integer.parseInt(br.readLine());
          
          // sout
          System.out.print(num);
          
          // BufferedWriter
          BufferedWrtier bw = new BufferedWriter(new OutputStreamWriter(System.out));
          bw.write(String.valueOf(num));
          // 버퍼에 있는 내용 출력
          bw.flush(); 

🔷 배열

- [Java] ArrayList <-> [C++] Vector

import java.util.ArrayList;

public class MainClass {
  public static void main(String args[]throws IOException) {
      // 1차원
      ArrayList<Integer> al = new ArrayList<>();
      
      // 2차원
      ArrayList<ArrayList<Integer>> al = new ArrayList<>();
      
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
      int n = Integer.parseInt(br.readLine());
      
      for(int i=0;i<n;i++) {
        al.add(new ArrayList<>());
        StringTokenizer st = new StringTokenizer(br.readLine());
        al.get(i).add(value);
      }
      
      for (int i = 0; i < 5; i++) {
        al.add(new ArrayList<>());
        for (int j = 0; j < 5; j++) {
            al.get(i).add(i * 5 + j + 1);
        }
      }
      
      // 초기화
      al.clear();
      al.addAll(Collections.nCopies(size, value));
      ex) al.addAll(Collections.nCopies(ans.size(),false));
      
      or
      
      for(int i=0;i<ans.size();i++) {
          al.add(false);
      }
      
      // 조회
      al.get(idx);
      
      // 정렬
      al.sort();
      
      // 크기
      int size = al.size();
      
      // 복사
      ArrayList<Integer> temp = new ArrayList<>();
      temp.addAll(al);

- [Java] Array <-> [C++] Array

int [] arr = new int[10];

int arr[] = {};
arr = new int[] {,,...};

// 정렬
Arrays.sort(arr);

// 길이
arr.length;

// String -> 배열로
String st = "abced";
char[] cArr = str.toCharArray();

// 배열 자르기
// 범위는 시작점 ~ 끝점-1
int [] temp=Arrays.copyOfRange(arr,1,5);

🔷 자료구조

- [Java] Set

import java.util.Set;
import java.util.HashSet;

public class MainClass {
  public static void main(String args[]throws IOException) {
      
      Set<String> s = new HashSet<String>();
      
      // 추가
      set.add("Hi");
      
      // 삭제
      set.remove("Hi");
      
      // 조회
      Iterator<String> it = s.iterator();
      // 값이 존재하면
      while(it.hasNext()) {
        // 참조값 가져옴
        String st = it.next();
        
      }
      
      // 크기
      s.size();

- [Java] Map

  import java.util.Map;
  import java.util.HashMap;

  public class MainClass {
    public static void main(String args[]throws IOException) {

        Map<String,Interger> m = new HashMap<>();

        // 추가
        m.put("key",1);

        // 값 가져오기
        m.get("key");

        // 값 존재 확인
        m.containsKey("key");

        //조회
        Iterator<String> it = m.keySet().iterator();

        while(it.hasNext()) {
          String key=it.next();
          int value=m.get(key);
        }

        // 크기
        m.size();   

- [Java] Queue

import java.util.Queue;
import java.util.LinkedList;

Queue<Integer> q = new LinkedList<>();

// push
q.add(1); // 실패시 예외 발생
q.offer(1); // 실패시 false 반환

// pop
q.poll();

// front
q.element(); // 공백이면 예외 발생
q.peek(); // 공백이면 null 반환

// clear
q.clear();

// size
q.size();

- [Java] Stack


import java.util.Stack;

Stack<Integer> s = new Stack<>();

// push
stack.push(1);
stack.add(1);

// pop
stack.pop();

// top
stack.peek();

// size
stack.size();

// clear
stack.clear();

- [Java] Priority_Queue


import java.util.PriorityQueue;

// 오름차순
PriorityQueue<Integer> pq = PriorityQueue<>();

// 내림차순
PriorityQueue<Integer> pq = PriorityQueue<Integer>(Collections.reverseOrder());

// 삽입
pq.add(1);

// 삭제
pq.remove();

// top
pq.peek();

- [Java] Pair
Java에는 C++처럼 Pair 자료형이 없으므로 만들어 사용

public class MainClass {
    
  static class Pair{
      int a;
      int b;
      
      Pair(int a, int b) {
        this.a=a;
        this.b=b;
      }
      
      // 정렬 메서드
      public int compareTo(Pair p) {
          // 오름 차순
          if (this.a != p.a) {
              // 같으면 0, > 이면 1, < 이면 -1
              return Integer.compare(this.a, p.a);
          }
          return Integer.compare(this.b, p.b);
          
          // 내림 차순
          if (this.a != p.a) {
              return Integer.compare(p.a, this.a);
          }
          return Integer.compare(p.b, this.b);
      } 
  }
  
  PriorityQueue<Integer> pq = PriorityQueue<Integer>(Pair::compareTo);
      

- [Java] 인접 리스트

static ArrayList<Integer>[] graph;

graph = new ArrayList[n+1];

for(int i=1;i<=n;i++) {
	graph[i]=new ArrayList<>();
}

for(int i=0;i<arr.length;i++) {
    graph[v1].add(v2);
    graph[v2].add(v1);
}

🔷 String

- [Java] String -> Array

String st= "Hi";
String[] arr = st.split("");

- [Java] String 추출

String st="HiHello";
st.substring(시작 idx, 끝 idx) -> 시작 ~-1
st.substring(2,4); // He

- [Java] String 뒤집기

String st = "Hi";
String nst = new StringBuilder(st).reverse().toString();

- [Java] String 값 변경

String st="Hello";
String nst=st.substring(0,2) + 'L' + st.substring(3); // HeLlo

StringBuilder st = new StringBuilder("Hello);
st.setCharAt(2,L); // HeLlo

🔷 형변환

- [Java] String <-> Int

// String to Int
String s = "Hi";
int num = Integer.parseInt(s);

// Int to String
int num = 123;
String s = Integer.toString(num);

or

String s = String.valueOf(num);

- [Java] Char <-> Int

// int to char
int num=5;
char c = (char)(num+'0');

// char to int
char c = '5';
int num = (num)(c-'0');

- [Java] String <-> Char

// char to String
char c1 = '5';
char c2[]={'a','b','c'};

String s1=String.valueOf(c1); // '5'
String s2=String.valueOf(c2); // abc

// String to char
String s1="5";
String s2="abc";

char c1=s1.charAt(0);
char c2=s2.toCharArray();

🔷 비교/유의

C++ 배열.size() -> Java 배열.length

Java 배열 - length
Java String - length()
Java List - size()

Java 배열 - arr[1]
Java String - str.charAt(1)
Java List - list.get(1) / list.set(1, 2)

C++ min,max -> Java Math.min, Math.max

profile
DDeo99

0개의 댓글