티스토리 뷰

Algorithm

[Java] 코딩테스트용 정리

MinsoftK 2021. 7. 14. 12:22
728x90
반응형

숫자

자리수 구하기 -> (int)Math.log10( n + 1);

제곱근 -> (int)Math.sqrt(n)

valueof parseInt의 차이[hong]

valueOf의 return 값은 객체, parseInt는 비교값 기본자료형이다.

//s는 숫자를 가진 문자열
parseInt (s, 10); // 10진수 형태로 변환

배열

- 선언 : int[] a = new int[8];
int[] a = {1,2,3,4,5};
- 배열 -> 문자열 : Arrays.toString();
- char 배열 -> 문자열 : String.valueOf();- , String str = new String(charArray);
- 문자열 -> char : .toCharArray;

- 문자를 문자열 -> String.valueOf(array);


- 배열을 ArrayList로 변환 -> List lst = Arrays.asList(arr);
- Set을 object타입의 배열로 변환 -> toArray();
- 배열 오름차순 : Arrays.sort(arr);
- 배열 내림차순 : Arrays.sort(arr, Collections.reverseOrder());
- 배열의 특정 범위만 빼기 : Arrays.copyOfRange(arr, 2 ,4 ); 2번째 인자(포함)부터 3번째 인자(미포함) 앞까지 추출)
- 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환
- int i = Integer.parseInt(숫자값으로 된 String); //static이라 Integer생성 안함
- int i = Integer.valueOf(str).intValue(); //Integer 생성해야한다.

  • parsInt intValue 차이
    오토언박싱으로 인해 객체로도 연산이 가능하다.. 객체생성 유무..?? 정확하겐 이해를 못했다.

- 1. 내용물 -> 내용물 형변환 Integer.parseInt()
- 2. 객체 -> 내용물 변환 intValue();

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOfRange(arr1, 2, 4)

배열의 특정 값의 index 리턴받기

  • Arrays.sort() 메소드로 정렬 후 Arrays.binarySerarch()로 항목의 인덱스 값을 찾을 수 있다. : Arrays.binarySearch(arr,"bb");

String

String str = "";

- str.startWith(a); -> 특정 문자로 시작하는지 판단
- str.endWith(a); -> 특정 문자로 끝나는지 판단
- str.equals(a); -> 같은지 아닌지 판단
- str.indexOf("a"); -> a가 몇번째 위치하는지 판단
- str.compareTo("bcef") -> str문자열과 사전 편찬 순으로 비교( 대소문자 구분)
- str.compareToIgnoreCase()("bcef") -> str문자열과 사전 편찬 순으로 비교( 대소문자 구분 x)
- str.length; -> 문자열길이판단
- String[] strArr = str.split("") -> 문자열 1개씩 나누어 배열로 반환, 넣는 값을 기준으로 나눌수도있음 (str.split(" ")
- str.substring(0, 2); -> 1번째 인자부터 2번째 인자 앞까지 문자추출
- str.toLowerCase -> 모든문자 소문자 변환
- str.toUpperCase -> 모든문자 대문자 변환
- str.trim(); -> 문자열 빈칸 제거
- String.valueOf(int i) -> i를 문자열로 변환
- str.charAt(i) -> i번째 문자 추출
- StringBuilder sb -> sb.toString -> StringBuilder을 문자열로 변환
- sb.append(); -> 문자열 뒤에 붙임

String str = new StringBuffer().append("Hello").append(" to").toString();

요런것도 가능하다....

문자열 정렬 .toCharArray() 로 바꾼 다음 .sort() 사용해야함.

String 배열 정렬 기준 변경

        //배열 정렬, 정렬 규칙으로는 2개를 더하여 더 큰 쪽이 우선순위가 있도록 정렬
        Arrays.sort(arr, new Comparator<String>() {
            public int compare(String s1, String s2) {
                return (s2+s1).compareTo(s1+s2);
            }
        });

 

ArrayList (입출력: add(), get())

List list =newArrayList(Arrays.asList(5,4,3,2,1)
ArrayList 일땐 Collections.sort(answer) 로 정렬

list.remove(1); 원소 1을 제거
list.remove(Integer.valueOf(1));
index 1의 값을 삭제하는 것이 아니라,
ArrayList에서 1 값을 삭제하기 위해서 Integer 객체를 전달하였습니다.
그런데, remove() 메소드는 ArrayList의 첫번째 1만 삭제합니다.
위 예제처럼, 1이 여러번 나올 경우, 1을 모두 삭제하기 위해서는
다음 예제와 같이 반복문을 사용하거나 removeAll() 메소드를 사용해야 합니다.

요소의 변경 -> arrList.set(0, 20);
리스트의 크기 -> arrList.size();

정렬

  • Collections.sort(arrList);
  • Collections.sort(arrList, Collections.reverseOrder());

StringBuffer 클래스 이용하기 (입출력: append(), get())

StringBuffer str =new.StringBuffer("Java Oracle");

부분 문자열을 해당 문자열에서 제거 -> str.Remove(인덱스, 삭제할 개수));
문자열의 일부를 다른 것으로 대체한다. -> str.Replace('S', 's); //스트링 가능
-> str.Replace('S', 's' , 0 , 8); //교체범위 idx 지정
문자열 중간에 다른 문자열 삽입 -> str.insert(4,"Script")); -> "JavaScript Oracle"
문자열 역순 -> str.reverse();
String으로 변환 -> sb.toString();

Stack

Stack 생성 : Stack<Integer> st = new Stack<Integer>();
요소 저장 -> push(value);
최상단 요소 -> peek();
요소의 제거 -> pop();
요소 위치 탐색 -> st.serarch(idx); // 맨 오른쪽부터 1

Queue

LinkedList<String> qu = new LinkedList<String>();
요소 저장 -> push(value)
최상단 요소 -> peek();
요소의 제거 -> poll();
특정 요소 제거 -> remove("하나");

우선순위 큐 (heap)

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(); //Min heap 
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder()); //Max heap

요소저장 -> add(i);
요소제거 -> remove(i);

HashSet (순서에 상관없이 저장하고 중복된 값 저장하지 않는다)

HashSet<String> hs01 = new HashSet<String>();
요소 저장 -> add(value);
요소의 총 개수 -> size();

Iterator<Integer> iter = ts.iterator();

while (iter.hasNext()) 
{	
	String str = iter.next();
}

TreeSet (데이터가 정렬된 상태로 저장되는 이진 검색트리 형태로 요소를 저장)

TreeSet<Integer> ts = new TreeSet<Integer>();

요소 저장 -> add(value);
요소 제거 -> remove(value);

Iterator<Integer> iter = ts.iterator();

while (iter.hasNext()) 
{	
	String str = iter.next();
}

 

Map 

Map<StringString> map = new HashMap<>();

	map.put("001", "kim");
	map.put("002", "lee");
	map.put("003", "choi");
	// 같은 key가 2개 있을 수 없습니다. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
	map.put("001", "kang");

	// map에 저장된 자료의 수를 추력합니다. 3이 출력됩니다.
	System.out.println(map.size());

키로 값을 꺼낸다. -> map.get("001")

키값을 모두 꺼낸다. -> Set<String> key =map.keySet(); //셋 자료구조에 key값이 저장이 됨.

Set 자료구조는 iterator로 정보를 꺼낸다.

            // map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
            Set<String> keys = map.keySet();
            // Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
            Iterator<String> iter = keys.iterator();
            while (iter.hasNext()) {
                // key를 꺼냅니다.
                String key = iter.next();
                // key에 해당하는 value를 꺼냅니다.
                String value = map.get(key);
                // key와 value를 출력합니다.
                System.out.println(key + " : " + value);
            }
        }
    }

 

 

 

4. 이외 팁

1. 특정 배열에 값들을 넣을 때, 중복없이 넣는 법

ArrayList를 선언하고 , 특정 값이 value라고 할 때
If( ArrayList.indexOf(value) < 0 )
Arraylist.add(value);
이런 식으로 해야함. indexOf는 특정 value가 없으면 -1을 리턴하기 때문에
어레이 리스트에 이 값이 없을 때만 add하겠다는 뜻이다.

2. 어레이리스트의 값을 하나씩 가져와서 배열에 넣을 때

String형태면 for문돌리면서 arr[i] = list.get(i); 하면되는데
Int 형태라면 arr[i] = list.get(i).intValue(); 라고 해줘야된다.

3. 스트링을 분할하려면 substring , 배열을 분열하려면?

스트링은 str.substring(3,5) 이런 식으로 원하는 부분만 뽑아낼 수 있는데
배열은 substring이 불가능하다. 대신 Arrays.copyOfRange() 메소드를 통해 복사한다.
Arrays.copyOfRange(원본배열, 시작, 끝) 이렇게 사용 가능하다.

4. 배열 특정 값의 index 리턴받기.
Array.sort() -> int idx = Arrays.binarySearch(arr, "bb")

5. 배열을 어레이리스트로 변환할 때

List lst = Arrays.asList(arr);

5. 해시와 링크드해시

HashMap<String , Integer> hm = new HashMap<>();
이렇게 선언한다.
값 추가 : hm.put(“minsoftk” , 10);
값 변경 : hm.put(“minsoftk” , 30); -> 키 기준이라 그냥 그대로 put하면 값이 변경됨
값 삭제 : hm.remove(“성재”);

Key , value 값 for문으로 뽑아내기
for (String key : ages.keySet())
ages.get(key)


자세한 내용 정리

String 메소드

startWith

  • 문자열이 지정한 문자로 시작하는지 판단 같으면 true반환 아니면 false를 반환한다.(대소문자구별)
String str = "apple";
boolean startsWith = str.startsWith("a");
System.out.println("startsWith: " + startsWith);
//결과 true

endWith

  • 문자열 마지막에 지정한 문자가 있는지를 판단후 있으면 true, 없으면 false를 반환한다.(대소문자구별)
String str = "test";
boolean endsWith = str.endsWith("t");
System.out.println("endsWith: " + endsWith);
//결과 : true

equals

  • 두개의 String에 값만을 비교해서 같으면 true, 다르면 false를 반환한다.(대소비교)
String str = "java";
String str = "java";
boolean equals = str.equals(str);
System.out.println("equals: " + equals);
//결과 : true

indexOf

  • 지정한 문자가 문자열에 몇번째에 있는지를 반환한다.
String str = "abcdef";
int indexOf = str.indexOf("d");
System.out.println("indexOf: " + indexOf);
//결과 : 3

lastindexOf

  • 문자열에 지정한 문자가 마지막몇번째에 있는 int를 반환한다.
String str = "AdnroidApp";
int lastIndexOf = str.lastIndexOf("A");
System.out.println("lastIndexOf:" + lastIndexOf);
//결과 : 7

length

  • 문자열의 길이를 반환한다.
String str = "abcdef";
int length = str.length();
System.out.println("length: " + length);
//결과 : 6

replace

  • 문자열에 지정한 문자" "가 있으면 새로 지정한 문자" "로 바꿔서 출력한다.
String str = "A*B*C*D";
String replace = str.replace("*", "-");
System.out.println("replace: " + replace);
////결과값: A-B-C-D

replaceAll

String str = "AB CD";
String replaceAll = str.replaceAll("\\p{Space}", "*");
System.out.println("replaceAll: " + replaceAll);
////결과값: AB*CD

split

  • 지정한 문자로 문자열을 나눌수 있다.(배열로 반환)
String str = "A:B:C:D:abcd";
String[] split = str.split(":");
System.out.println("split: " + split[1]);
//결과값:B

substring

  • 문자열에 지정한 범위에 속하는 문자열을 반환한다.(시작범위에 값은 포함하고, 끝나는 범위에 값은 포함하지않는다.)
String str = "ABCDEF";
String substring = str.substring(0, 2);
System.out.println("substring: " + substring);
//결과값:AB

toLowerCase

  • 문자열에 대문자를 소문자로 변환한다.
String str = "abcDEF";
String toLowerCase = str.toLowerCase();
System.out.println("toLowerCase: " + toLowerCase);
//결과값:abcdef

toUpperCase

  • 문자열에 소문자를 대문자로 변환한다.
String str = "abcDEF";
String toUppercase = str.toUpperCase();
System.out.println("toUppercase: " + toUppercase);
//결과값:ABCDEF

toString

  • 문자열을 그대로 반환해준다.
String str = "1234";
String toString = str.toString();
System.out.println("toString: " + toString);
//결과값:1234

trim

  • 문자열에 공백을 없에준다.
String s = " java java java ";
String v;
v = s.trim();
System.out.println("trim:" + v);
//결과값:java java java

valueOf

  • 지정한 개체의 원시 값을 반환
int i = 12345;
long l = L;
char c = '';
System.out.println("valueOf: " + String.valueOf (i));
System.out.println("valueOf: " + String.valueOf (l));
System.out.println("valueOf: " + String.valueOf (c));
//결과값:
//valueOf: 12345
//valueOf: 1
//valueOf: 1

compareTo

  • 두개의 String를 앞에서부터 순사적으로 비교하다가 틀린부분이 있으면 비교하는 String에 캐릭터값을 반환한다.(대소문자를 구별)
String str1 = "A";
String str2 = "B";
int compareTo = str1.compareTo(str2);<p></p>
if(compareTo > 0){<p></p>
       System.out.println(str1 + " > " +str2);
} else if (compareTo == 0){
       System.out.println(str1 + " = " +str2);
} else{
       System.out.println(str1 + " < " +str2);
}
//결과값: A < B

contains

  • 두개의 String을 비교해서 비교대상 String을 포함하고 있으면true, 다르면 false를 반환한다.
String str1 = "abcd";
String str2 = "c";
boolean contains = str.contains(str);
System.out.println("contains: " + contains);
//결과값:true

charAt

  • 지정한 index번째에 문자를 반환한다.
String str = "charAt";
char charAt = str.charAt();
System.out.println("charAt: " + charAt);
//결과값:a

concat

  • 문자와 문자를 결합해준다.
String str1 = "Han";
String str2 = "SeeJin";
String concat = str1.concat(str2);
System.out.println("concat: " + concat);
//결과값:HanSeeJin

format

  • 서식문자열을 이용해서 서식화된 문자열을 반환한다.
int i = 123456789;
String str = String.format("%,d", i);
System.out.println("format: " + str);
//결과값:123,456,789

matches

  • 지정한 정규 표현과 일치 할때 true를 반환한다.
int i = 123456;
String str1 = String.format("%,d", i);
String str2 = "123456";
boolean matches = str1.matches(str2);
System.out.println("matches: " + matches);
//결과값:false

replaceFirst

  • 문자열에 지정한 문자" "가 있으면 첫번째만 새로지정한 문자" "로 바꿔서 출력한다.
String str = "Aman";
String replaceFirst = str.replaceFirst("A", "super");
System.out.println("replaceFirst: " + replaceFirst);
//결과값:superman

문자열 관련

toCharArray

  • 문자열을 한 글자씩 쪼개서
    이를 char타입의 배열에 집어넣어주는 친절한 메소드이다.
    String(문자열)을 char형 배열로 바꾼다.
 String s1 = "Hello World";
 char[] charArr = s1.toCharArray();

  //how to use method
  //char형 배열을 합쳐서 하나의 String(문자열)로 만들 수 있다.
  String s2 = new String(charArr);

StringBuilder

  • string 클래스는 고정 길이로 되어있기 때문에 한 번 작성한 문자열 뒤에 문자열을 추가하게 되면 새로운 문자열을 작성하게 됩니다.

이에 비해 StringBuilder 클래스는 가변길이의 문자열을 사용하는 클래스로 문자를 추가해도 새로운 오브젝트를 작성하지 않고 문자열을 추가합니다.

String , Stringbuffer

String과 StringBuffer/StringBuilder 에 모두 들어있는 메소드

char charAt(int index) : 특정 위치에 있는 문자 반환

int length() : 문자열의 길이

String substring(int start, end end) : 문자열의 일부를 뽑아냄

String toString() : 객체를 문자열로 나타낸 값

String concat(String) : 문자열을 합침

String append(String) : 문자열을 합침

String 클래스에만 존재

String replace(char old, char new) : 특정 문자를 모두새로운 문자로 치환

String substring(int begin , int end) : String 일부를 뽑아냄

char[] toCharArray() : char 배열로 변환

String toLowerCase() : 모두 소문자로 변환

String toUpperCase() : 모두 대문자로 변환

String trim() : 끝에 붙어있는 공백문자 제거

String valueOf(char []) : char배열로부터 문자열을 만들어냄

String valueOf(int i) : 원시 값으로부터 문자열을 만들어냄

StringBuffer 및 StringBuilder 클래스에 들어있는 메소드

StringBuffer/StringBuilder delete(int start , int end) : 일부를 삭제함

StringBuffer/StringBuilder insert(int offet, any primitive of a char[]) : 먼가를 삽입함

StringBuffer/StringBuilder replace(int start , int end , String s) : 일부분을 String 객체로 치환

StringBuffer/StringBuilder reverse() : 객체를 뒤집음

StringBuffer/StringBuilder setCharAt(int index , char ch) : 주어진 문자를 치환함

 

java.time 관련 클래스

    // 2012년 12월 12일의 시간에 대한 정보를 가지는 LocalDate객체를 만드는 방법
    LocalDate ld1 = LocalDate.of(2012, Month.DECEMBER, 12); // 2012-12-12 from values

        // 17시 18분에 대한 LocalTime객체를 구한다.
    LocalTime lt1 = LocalTime.of(17, 18); // 17:18 (17시 18분)the train I took home today

    // 10시 15분 30초라는 문자열에 대한 LocalTime객체를 구한다.
    LocalTime lt2 = LocalTime.parse("10:15:30"); // From a String


import java.time.*;
      	LocalDateTime ld = LocalDateTime.now(); // 현재의 날짜와 시간
        LocalDate theDate = ld.toLocalDate(); //현재의 날짜
        Month month = ld.getMonth();    // 영어로 month
        System.out.println(ld);
        System.out.println(theDate);
        System.out.println(month);
//	실행결과
// 	2021-07-16T16:34:33.132109
// 	2021-07-16
// 	JULY

 

 

 

📕 Reference :

http://www.dreamy.pe.kr/zbxe/CodeClip/3766960)

https://velog.io/@hsgin11/Java-valueof-parseInt%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

 

728x90
반응형
댓글