원지의 개발
article thumbnail
728x90

진법 변환

  • 진수는 8비트 기준으로 1, 2, 4, 8, 16 ... 배수로 나타냄
  • 2진수: 11011000 = 1 + 2 + 8 + 16 = 27
  • 16진수: 2진수에서 4개를 묶어서 읽기, 0 ~ 9 ABCdef 로 표현
                  00000110 = 2 + 4 = 06
10진수 숫자
2진수 0B 붙임
8진수 0 붙임
16진수 0x 붙임

10진수 ▶ n진수

//1. 10진법 ▶ 3진법
   String a = ""; //값을 더해주려고
   while(n > 0) { //n이 0보다 클때까지 반복
   		a = (n % 3) + a; //문자열 앞에 3으로 나눴을때 나머지를 더해줌
        n /= 3; //반복하기 위해 n을 3으로 나눠줌
   }    
        
//2. Integer.toString(문자열, 진법) 사용
	a = Integer.toString(n, 3);
    
    //2진법 - toBinaryString(int i);
    //16진법 - toHexString(int i);
    //8진법 - toOctalString(int i);
  • int는 전부 10진수로 인식하기 때문에 나머지 진수는 String으로 받아야 함
  • Integer의 toString(int n, int radix)로 사용 가능

앞의 0이 출력되지 않을 때?

  • 9를 2진법으로 변환하여 출력할 때, 1001이 나오는데 01001로 출력하고 싶음
  • String.format() 사용
int num = 9;
String answer = Integer.toBinaryString(num); //1001
answer = String.format("%05d", Integer.parseInt(answer));
  • "%05d" - 5자리 정수 내에 공백이 있으면 0으로 표시
  • "%5d" - 정수가 5자리 미만이면 공백으로 표시

n진수 ▶ 10진수

//2. 3진법 ▶ 10진법
//Integer.parseInt(문자열, 진법)
//문자열 형태로 변환 후, 뒤에 진법을 써주면 10진수 기준으로 1, 3번 가능
    answer = Integer.parseInt(reverse, 3);
    return answer;
  • Integer.parseInt(문자열, 진법)으로 사용 가능

비트 연산자

& 두 비트 모두 1인 경우 = 1
| 두 비트 중 하나라도 1이면 = 1
^ 두 비트가 서로 다르면 = 1
~ 비트 반전
  • 기본적으로 이진수에서 사용되며, 비트 단위 연산을 수행하는데 주로 사용
int num1 = 5; // 이진수: 0101
int num2 = 3; // 이진수: 0011
int result = num1 | num2; // result는 7이 됨 (이진수: 0111)

https://school.programmers.co.kr/learn/courses/30/lessons/17681


StringBuilder & StringBuffer

  • 두 클래스의 차이점은 동기화 여부

StringBuilder

  • String(immutable)과 다르게 수정 가능(mutable)
    String은 값을 수정하려면 다른 값을 가진 String에 대입해야함
    String객체는 데이터에 변화가 생기면 기존 객체를 재활용하지 않고, 새로운 객체 생성 → 메모리 과소비
  • 새로운 객체 생성 시 속도가 느려지는 현상 발생 측면에서 개선된 클래스 → 기존 객체 재활용, 속도 ↑
  • 복잡하거나 반복적인 문자열 수정시 사용 - for, while문에서 문자열을 계속 추가해야 하는 경우
  • 인스턴스를 생성할 때 버퍼의 크기를 충분히 주지 않으면 성능이 저하 됨 - 작업 중에 더 큰 배열이 추가로 생성됨
  • String  클래스와 다르게 equals()를 오버라이딩 하지 않음 (중요)
  • 동기화를 보장하지 않음 ▶ 상대적으로 동작 속도가 빠름
  • 스레드에 안전한지 여부가 관계 없을 때 사용
StringBuilder sb = new StringBuilder();
sb.append("str1");
sb.append("str2");
String result = sb.toString();

주요 메서드

메서드 내용 기타
append() 기존 문자열의 뒤에 문자열 추가 마지막에 추가
insert(시작할인덱스, 문자열) 특정 위치에 문자열 추가 중간에 추가
delete() 문자열 삭제  
deleteCharAt() 특정 인덱스의 문자 하나를 삭제  
replace() 문자열의 일부분 → 다른 문자열로 대체 " " → "" 공백제거
setCharAt() 문자열에서 주어진 index의 문자 → 다른 문자로 대체  
toString() 객체의 값을 문자열로 반환  
reverse() 문자열을 거꾸로 뒤집음  
capacity() 인스턴스의 버퍼 크기를 알려줌 length()는 담긴 문자열의 크기
a = new StringBuilder(a).reverse().toString();
		//빌더 쓸 생각을 못함

StringBuffer

  • StringBuilder와 호환
  • thread - safethread - safe
  • 동시에 객체에 접근했을 때, 동시성을 제어해주는 기능이 존재
  • 멀티스레드를 이용하여 하나의 문자열을 수정할 필요가 있을 때 사용
  • 스레드에 안전한 프로그램이 필요하거나 안전한지 모를 경우 사용
StringBuffer sb = new StringBuffer();
sb.append("str1");
sb.append("str2");
String result = sb.toString();

2022.10.18 - [프로그래밍 언어/Java] - [Java] API_ java.lang (문자열, Math 등)

 

[Java] API_ java.lang (문자열, Math 등)

JAVA API : application programming interface 미리 만들어진 기능인 라이브러리 API안에 많은 패키지들이 존재 (lang, util, IO 등) 메서드 모형 읽는 법 접근제어자 + (매개변수) + ;(결과)반환유형 - 클래스가 선

j-won950101.tistory.com

Collections

2022.10.26 - [프로그래밍 언어/Java] - [Java] API_ Collection Framework (List, Set, Map)

 

[Java] API_ Collection Framework (List, Set, Map)

JAVA API : application programming interface 미리 만들어진 기능인 라이브러리 API안에 많은 패키지들이 존재 (lang, util, IO 등) 메서드 모형 읽는 법 접근제어자 + (매개변수) + ;(결과) 반환 유형 - 클래스가

j-won950101.tistory.com


 

위의 세가지 클래스에서 reverse() 메서드 제공


2022.10.28 - [프로그래밍 언어/Java] - [Java] Nested Class, Lambda, Stream API(ArrayList)

2022.10.25 - [프로그래밍 언어/Java] - [Java] API_ java.util (Arrays 클래스 - search, date, calendar, random)

Arrays.stream

//문자열 sort
import java.util.*;

class Solution {
    public String solution(String my_string) {
        char[] charArr =  my_string.toLowerCase().toCharArray();
        Arrays.sort(charArr); //알파벳 순으로 정렬
        String answer = String.valueOf(charArr);
        return answer;
    }
}


//int 리스트 ▶ int 배열
	//1. 배열 사용
	int[] answer = new int[list.size()];
    for(int i = 0; i < list.size(); i++) {
    	answer[i] = list.get(i).intValue();
    }
    //2. stream 변환, intValue 메서드 사용 (Integer.intValue())
    int[] answer = list.stream()
                   .mapToInt(Integer::intValue)
                   .toArray();
    //3. stream 변환, 람다식
    int[] answer = list.stream()
    			   .mapToInt(i -> i)
                   .toArray();
//String 배열 ▶ int 배열
    int[] answer = Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray();

//String 리스트 ▶ String 배열
	String[] myArray = myList.toArray(new String[myList.size()]);

//기본
	for(int i = 0; i < list.size(); i++) {
        answer[i] = list.get(i);
    }

Integer 리스트 > int 배열 변환

  • String 타입의 리스트를 배열로 변환할 때는 toArray()를 사용하면 변환
  • int형과 같은 primitive 타입은 toArray()를 사용할 수 없고, int형과 같은 primitive 타입은 아래의 방법을 통해 가능

https://velog.io/@deannn/Java-int%ED%98%95-ArrayList-%EB%B0%B0%EC%97%B4-%EB%B3%80%ED%99%98

728x90
profile

원지의 개발

@원지다

250x250