TIL - Java 알고리즘(1)

김지현·2023년 4월 7일
0

항해99

목록 보기
4/16

2023-04-07


1. 직사각형 별찍기

a(* 의 개수)와 b(열)의 반복을 통해 직사각형 별을 찍는 문제
이중 for문으로 a와 b의 반복을 했음

import java.util.Scanner;

public class P01 {
    public static void main(String[] args) {
        // 직사각형 별찍기
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        for (int i = 0; i < b; i++) {
            for (int j = 0; j < a; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

▲ Scanner

Scanner 클래스를 이용한 입력은 Java의 여러가지 입력방법 중 가장 쉬우면서 대중적인 입력방법
Scanner 객체이름 = new Scanner(System.in);
( 객체이름은 대체로 in, input, sc, scan 이 가장 많이 쓰임)

  • System.in : 사용자로부터 입력을 받기 위함

  • util 패키지를 경로의 Scanner 클래스를 호출해야 사용할 수 있음
    - import java.util.Scanner; : import를 통해 호출해주어야 함

  • 메서드를 사용하여 기본적인 데이터 타입들을 입력할 수 있음
    1) byte - nextByte( )
    2) short - nextShort( )
    3) int - nextInt( )
    4) long - nextLong( )
    5) float - nextFloat( )
    6) double - nextDouble( )
    7) boolean - nextBoolean( )
    8) String - next( ) : 공백(띄어쓰기) 기준 읽음, nextLine( ) : 개행(줄바꿈) 기준 읽음


2. 가운데 글자 가져오기

s의 길이가 홀수면 가운데 글자 하나를, 짝수면 가운데 두 글자를 반환하는 문제

s의 길이가 짝수일 때는 s.length()/2-1 번째 인덱스부터 그 다음 인덱스인 s.length()/2까지 반환하고,
s의 길이가 홀수일 때는 s.length()/2 번째 인덱스만 반환하도록 했음
(int)이므로 홀수일 때 /2해서 .5가 나와도 버려지게 됨

public class P03 {
    public static String main(String s) {
        // 가운데 글자 가져오기
        String answer = "";
        int sLength = s.length();

        if (sLength % 2 == 0) {
            answer = s.substring((int) (sLength / 2) - 1, (int) (sLength / 2) + 1);
        } else  {
            answer = s.substring((int) (sLength / 2), (int) (sLength / 2) + 1);
        }
        return answer;
    }
}

▲ substring

substring(int x) : 문자열을 x번째 인덱스부터 맨 끝 인덱스까지 자름

String str = "0123456789";
str.substring(3)				// 3456789

substring(int x, int y) : 문자열을 x부터 y까지 자름 (x는 포함, y는 불포함)

String str = "0123456789"
str.substring(3, 7)				// 3456

3. 문자열을 정수로 바꾸기

String s를 int형으로 반환하는 문제

public class P05 {
    public static int main(String s) {
        // 문자열을 정수로 바꾸기
        int answer = 0;
        answer = Integer.parseInt(s);
        return answer;
    }
}

▲ Integer.parseInt

Integer.parseInt(String s) : 숫자형의 문자열을 10진수의 Integer형으로 반환해줌

Integer.parseInt("123");		// 123

Integer.parseInt(String s, int radix) : 숫자형의 문자열을 첫번째 인자값으로 받고 변환할 진수값을 입력하면 해당 진수에 맞춰 Integer형으로 반환해줌

Integer.parseInt("123", 8);		// 173 (123의 8진수 값)

4. 핸드폰 번호 가리기

핸드폰 뒷번호 4개를 제외한 남은 앞번호를 모두 * 로 바꾸는 문제

public class P09 {
    public static String main(String phone_number) {
        // 핸드폰 번호 가리기
        String answer = "";

        for (int i = 0; i < phone_number.length(); i++) {
            if (i < phone_number.length() - 4) {
                answer += "*";
            } else {
                answer += phone_number.charAt(i);
            }
        }
        return answer;
    }
}

▲ charAt

: String으로 저장된 문자열 중에서 한 글자만 선택해서 char타입으로 변환해줌

String str = new String();
char ch = '';
str = "Hello World";
ch = str.charAt(0);
System.out.println(ch);			// H

5. 문자열 내 p와 y의 개수

s 문자열 내에 p,y 대소문자 상관없이 개수를 세어서 같으면 true 다르면 false

public class P16 {
    public static boolean main(String s) {
        // 문자열 내 p와 y의 개수
        boolean answer = true;
        int pCount = 0;
        int yCount = 0;

        s = s.toLowerCase();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == 'p') {
                pCount++;
            } else if (c == 'y') {
                yCount++;
            }
        }
        answer = (pCount == yCount) ? true : false;
        return answer;
    }
}

▲ toLowerCase

: 대상 문자열을 모두 소문자로 변환함

String str = "Hello World";
str = str.toLowerCase();
System.out.println(str);		// "hello world"

▲ toUpperCase

: 대상 문자열을 모두 대문자로 변환함

String str = "hello world";
str = str.toUpperCase();
System.out.println(str);		// "HELLO WORLD"

6. 이상한 문자 만들기

공백으로 문자열을 구분하여 그 단어의 홀수번째 알파벳을 대문자로 짝수번째는 소문자로 반환하는 문제

public class P21 {
    public static String main(String s) {
        // 이상한 문자 만들기
        String answer = "";
        int count = 0;
        String[] strArr = s.split("");

        for (String str : strArr) {
            count = str.contains(" ") ? 0 : count + 1;
            answer += count % 2 == 0 ? str.toLowerCase() : str.toUpperCase();
        }
        return answer;
    }
}

▲ split

: 입력받은 정규표현식 또는 특정 문자를 기준으로 문자열을 나누어 배열(Array)에 저장하여 리턴함

String str = "010-1234-5678";
String[] strArr = str.split("-");

String strNum1 = strArr[0];
String strNum2 = strArr[1];
String strNum3 = strArr[2];

System.out.println(strNum1);		// 010
System.out.println(strNum2);		// 1234
System.out.println(strNum3);		// 5678

▲ contains

: 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수 (대/소문자 구분)

String str = "Hello World";

System.out.println(str.contains("hello"));		// false
System.out.println(str.contains("Hello"));		// true

7. 자릿수 더하기

int n의 숫자를 모두 더하는 문제

public class P22 {
    public static int main(int n) {
        //  자릿수 더하기
        int answer = 0;

        String str = String.valueOf(n);
        for (int i = 0; i < str.length(); i++) {
            answer += (int) str.charAt(i) - '0';
        }
        return answer;
    }
}

▲ String.valueOf

: object의 값을 String으로 변환(toString() 과 같은 역할)
< object가 null 인 경우 >
toString() : NPE(null을 만났을 때 발생하는 runtime 예외상황)을 발생시킴
valueOf : "null"이라는 문자열로 처리함


8. 자연수 뒤집어 배열로 만들기

long n을 뒤집어서 그 숫자를 하나씩 int 배열로 반환하는 문제

public class P23 {
    public static int[] main(long n) {
        // 자연수 뒤집어 배열로 만들기
        String str = String.valueOf(n);

        StringBuilder sb = new StringBuilder(str);
        sb = sb.reverse();
        String[] strArr = sb.toString().split("");

        int[] answer = new int[strArr.length];
        for (int i = 0; i < strArr.length; i++) {
            answer[i] = Integer.parseInt(strArr[i]);
        }
        return answer;
    }
}

▲ StringBuilder

: String 클래스가 문자열을 생성자로 넣어 인스턴스를 한 번 생성하고 나면 인스턴스가 가진 문자열 값을 변경하지 못하는 단점을 보완한 클래스
StringBuilder sb = new StringBuilder(); : 객체 선언


9. 정수 내림차순으로 배치하기

n의 각 자릿수를 큰것부터 작은 순으로 정렬하는 문제

import java.util.Arrays;
import java.util.Collections;

public class P24 {
    public static long main(long n) {
        // 정수 내림차순으로 배치하기
        long answer = 0;

        String[] strArr = String.valueOf(n).split("");
        Arrays.sort(strArr, Collections.reverseOrder());

        StringBuilder sb = new StringBuilder();

        for(String str : strArr) {
            sb.append(str);
        }
        answer = Long.parseLong(sb.toString());
        return answer;
    }
}

▲ Collections.reverseOrder

: 정렬 (내림차순)

Integer[] nums = {50, 9, 20, 40};
Arrays.sort(nums, Collections.reverseOrder());			// [50, 40, 20, 9]

▲ append

: 문자열 끝에 문자열을 추가함
(StringBuffer나 StringBuilder가 필요함)

StringBuffer sb = new StringBuffer();

sb.append("Hello");
sb.append("World");
System.out.println(sb);				// Hello World

▲ Long.parseLong

: String 문자열을 Long 형태로 변환

String str = "100";

long l = Long.parseLong(str);
System.out.println(l);				// 100 (long)

0개의 댓글

관련 채용 정보