프로그래머스 문제: 옹알이 (자바, Java)
[프로그래머스] Level 0 옹알이 Level 0 중 가장 정답률이 낮길래 풀어봤다. 문제 태어난 지 6개월밖에 되지 않은 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 이어 붙인 발음밖에 하지 못 한다고 한다. 문자열 배열 babbling이 매개변수로 주어질 때, 조카가 발음할 수 있는 단어의 개수를 return하도록 메서드를 완성하라 나의 답안 class Solution { public int solution(String[] babbling) { int answer = 0; String[] canSay = {"aya", "ye", "woo", "ma"}; String str; for (int i = 0; i
2024.04.03
프로그래머스 문제: 홀짝에 따라 다른 값 반환하기 (자바, Java)
[프로그래머스] Level 0 홀짝에 따라 다른 값 반환하기 머리가 잘 안돌아가서 복잡하게 풀었는데, 다른 분들의 풀이를 보니 훨씬 간단하게 풀었더군요 .. 문제 양의 정수 n이 매개변수로 주어지고, n이 홀수이면 n 이하의 홀수인 모든 양의 정수의 합을 반환하고, n이 짝수면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 반환하는 메서드를 작성하라. 나의 답안 class Solution { public int solution(int n) { int oddSum = 0; int evenSum = 0; if (n % 2 == 1) { for (int i=1; i
2024.04.01
no image
자바 삼항연산자 사용법
삼항연산자란 if조건문과 유사한 기능을 하는 연산자로, 코드를 간결하게 표현할 수 있다는 장점이 있음 그러나 복잡한 로직 속에서는 오히려 가독성을 해칠 수 있으므로 유의해야함. 자바 삼항연산자 구조 조건문이 참일 경우 표현식1이 실행되고, 거짓일 경우 표현식2가 실행된다. 사용 예시 [프로그래머스 문제] 자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성 - 삼항연산자 사용 import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.next..
2024.03.31
자바 String 클래스 메서드 정리
String 클래스란? Java에서 문자열과 관련된 유틸리티 메서드를 모아둔 클래스 String 클래스 메서드 종류 charAt(인덱스): 해당 인덱스에 있는 문자를 반환 length(): 문자열의 길이를 반환 substring(시작인덱스, 끝인덱스): 시작인덱스부터 끝인덱스 직전까지 문자열 반환, 끝인덱스 생략 시 끝까지 반환 equals(객체): 주어진 객체와 문자열이 같은지 비교(true/false) indexOf(정수or문자): 문자열에서 해당 문자가 어느 위치에 있는지 인덱스값 반환(없을 경우 -1 반환) contains(문자열): 해당 문자열이 포함되어 있는지 확인(true/false) toLowerCase() / toUpperCase(): 문자열을 소문자/ 대문자로 변환 trim(): 문자열..
2024.03.30
no image
자바 Character 클래스 : 소문자 혹은 대문자로 변경하는 메서드?
Character 클래스란? Character 클래스는 Java에서 문자값과 관련된 유틸리티 메서드를 모아둔 클래스 Character 클래스 메서드 종류 isUpperCase(ch) : 문자 ch 값이 대문자인지 확인(true/false) isLowerCase(ch) : 문자 ch 값이 소문자인지 확인(true/false) isLetter(ch) : 문자 ch 값이 문자인지 확인(true/false) isDigit(ch) : 문자 ch 값이 숫자인지 확인(true/false) isWhitespace(ch) : 문자 ch 값이 공백인지 확인(true/false) isDefined(ch) : 문자 ch가 유니코드인지 확인(true/false) toUpperCase(ch) : 문자 ch 값을 대문자로 변환하여..
2024.03.26
no image
자바 나눗셈 소수점 자리까지 나타내는 방법
백준이나 프로그래머스 등 자바 프로그래밍 관련 문제를 풀 때, 초보자라면 궁금증한 것 중 하나가 바로 나눗셈 소수점 자리까지 값을 얻는 방법에 관한 것이다. 예를들어, 1 / 3 = 0.333333 의 값을 출력하고 싶은데, 자연스럽게 아래의 코드를 입력하면 출력값은 0.0이 나올 뿐이다. int a = 1; int b = 3; double result = a / b; System.out.println(result); // 출력: 0.0 이렇게, result만 실수 타입으로 선언하면 소수점까지 쫙 나올 줄 알았는데, 출력은 0.0 으로 나온다. 결론적으로, 결과가 소수점까지 나오도록 하기 위해서는, 나누어주는 변수 a, b 둘 중 하나라도 실수형 타입이어야만 결과값이 소수점까지 표현이 된다. 따라서 아래..
2024.03.21
자바 제어문 정리 (if문, switch문, while문, for문)
※ 비교연산자 a = b : a와 b가 같다 a != b : a와 b는 같지 않다 ※ and, or, not 연산자 a && b : a, b 모두 참이어야 참 (and) a || b : a, b 중 하나만 참이어도 참 (or) !a : a가 거짓이면 참 (not) ※ break;와 continue; break: 해당 제어문 자체를 빠져나감 (제어문 끝, 다음 문장 수행) continue: 해당 제어문의 조건문으로 돌아감 (제어문 내의 조건문으로 즉, 제어문 처음부터 다시 수행) ■ If 문: 구조 : If - else if - else If (조건문) { ; ; .... } else if (조건문) { ; ; .... } else if (조건문) { ; ; .... } else { ; ; .... } ■..
2024.03.20
자바 자료형 정리(다시 정리)
※ 변수명 짓는 규칙 숫자로 시작 불가 특수문자는 _ & 만 가능 int, class, return 등 키워드는 변수명으로 사용 불가 카멜 케이스 ex) getBackGround ※ 클래스명 짓는 규칙 명사로 할 것 대문자로 시작 파스칼케이스 ex) ChocoCookie ※ 메서드명짓는 규칙 동사로 할 것 소문자로 시작 카멜 케이스 ex) getBackGround ■ 원시 자료형(Primitive type) 과 참조 자료형(Reference type): 원시자료형 : 변수에 실제 값을 가지는 자료형 참조자료형 : 실제 값을 갖는 것이 아닌 데이터가 저장된 메모리의 주소 값을 가지는 자료형 구 분 자료형명 자 료 형 특 징 사 용 예 시 원시 자료형 int 정수형 -2147483648 ~ 214748364..
2024.03.17
자바 프로그램 만들기 : 자릿수 구하기
만들 프로그램 양의 정수를 입력받고, 입력받은 수의 자릿수를 출력 내가 작성한 코드 메서드명 : getCount 입력받는 값은 양의 정수(a) 출력하는 값은 숫자 개수 처음엔 10 미만일 경우 1자리, 100 미만일 경우 2자리...로 생각하였으나, 무한한 자릿수를 나타낼 수 없어 문자열로 변환하고 글자수를 세는 방법을 생각하게 됨 public class Problem3 { static int getCount(int a) { String result = "" + a; return result.length(); } public static void main(String[] args) { System.out.println("자릿수: "+getCount(3)); System.out.println("자릿수: "..
2024.03.15
자바 프로그램 만들기 : 게시판 페이징
만들 프로그램 게시물의 총 개수와 한 페이지에 보여 줄 게시물 수를 입력했을 때 총 페이지 수를 출력하는 프로그램 내가 작성한 코드 import java.util.Scanner; public class Problem2 { static int getTotalPage(int m, int n) { int result = 0; if (m % n == 0) { result = m / n; } else if(m % n != 0) { result = (m / n) + 1; } return result; } public static void main(String[] args) { Scanner sc1 = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); Sy..
2024.03.13

[프로그래머스] Level 0 옹알이

 

Level 0 중 가장 정답률이 낮길래 풀어봤다.

 

 

문제

태어난 지 6개월밖에 되지 않은 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 이어 붙인 발음밖에 하지 못 한다고 한다. 문자열 배열 babbling이 매개변수로 주어질 때, 조카가 발음할 수 있는 단어의 개수를 return하도록 메서드를 완성하라

 

 

 

 

 

나의 답안

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        String[] canSay = {"aya", "ye", "woo", "ma"};
        String str;

        for (int i = 0; i < babbling.length; i++) {
            str = babbling[i];

            for (int j = 0; j < canSay.length; j++) {

                if (str.length() != 0 && str.contains(canSay[j])) {

                    if (str.equals(babbling[i])) {
                        str = babbling[i].replaceAll(canSay[j], "-");
                    } else {
                        str = str.replaceAll(canSay[j], "-");
                    }
                }
            }

            if (str.replaceAll("-", "").isEmpty()) {
                answer++;
            }
        }

        return answer;
    }
}

 

 

 

 

 

다른 유저의 답안

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;

        for(int i =0; i < babbling.length; i++) {
            babbling[i] = babbling[i].replace("aya", "1");         
            babbling[i] = babbling[i].replace("woo", "1");
            babbling[i] = babbling[i].replace("ye", "1");
            babbling[i] = babbling[i].replace("ma", "1");      //해당하는 문자열이 있으면 1로 변환
                                                                                    //replace → replaceFirst 로 변경해야함!
            babbling[i] = babbling[i].replace("1", "");         //1을 제거
            if(babbling[i].isEmpty()) {      
                answer = answer + 1;
            }
        }

        return answer;
    }
}

 

  • 불필요하게 canSay배열 및 Babbling의 각 항목을 넣기 위한 문자열 변수(str)를 선언하지 않음 (성능, 가독성 ↑)
  • for문을 1번만 사용함
  • 단, "ayaaya"와 같은 중복이 발생해도 카운트가 된다. 따라서 replace() 대신 첫번째 해당문자만 변경해주는 replaceFirst()를 사용해야 한다!

 

복습

  • 배열의 길이 확인 :  arr.length      [괄호 사용 X]
  • 문자열의 일부를 다른 문자로 변환 :  String.replace("기존문자", "바꿀문자")
  • 문자열에 특정 문자가 포함되는지 확인 :  String.contains("문자")
  • 두 값이 같은지 확인 :  "문자".equals("문자")

[프로그래머스] Level 0 홀짝에 따라 다른 값 반환하기

 

머리가 잘 안돌아가서 복잡하게 풀었는데, 다른 분들의 풀이를 보니 훨씬 간단하게 풀었더군요 ..

 

 

문제

양의 정수 n이 매개변수로 주어지고, n이 홀수이면 n 이하의 홀수인 모든 양의 정수의 합을 반환하고, n이 짝수면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 반환하는 메서드를 작성하라.

 

 

 

 

 

나의 답안

class Solution {
    public int solution(int n) {        
        int oddSum = 0;
        int evenSum = 0;

        if (n % 2 == 1) {
            for (int i=1; i <= n; i++) {
                if (i % 2 != 0) {
                    oddSum += i;
                }
            }
            return oddSum;
        } else {
            for (int i=1; i <= n; i++) {
                if (i % 2 == 0) {
                    evenSum += i*i;
                }
            }
            return evenSum;
        }
    }
}

 

 

 

보완사항

  • sum 값을 불필요하게 oddSum, evenSum으로 나누어 선언할 필요 없이 하나의 변수 sum으로 선언
  • for문에서 i값을 2씩 증가시키기

 

class Solution {
    public int solution(int n) {
        int sum = 0;    // 변수 1개만 생성

        if (n % 2 == 1) {
            for (int i = 1; i <= n; i += 2) {    // i값 2씩 증가
                sum += i;
            }
        } else {
            for (int i = 2; i <= n; i += 2) { 
                sum += i * i; 
            }
        }
        return sum;
    }
}

 

 

자바 삼항연산자 사용법

친환경 개발자
|2024. 3. 31. 23:14

삼항연산자란

if조건문과 유사한 기능을 하는 연산자로, 코드를 간결하게 표현할 수 있다는 장점이 있음

그러나 복잡한 로직 속에서는 오히려 가독성을 해칠 수 있으므로 유의해야함.

 

 

 

자바 삼항연산자 구조

 

 

 

조건문이 참일 경우 표현식1이 실행되고, 거짓일 경우 표현식2가 실행된다.

 

 

 

 

사용 예시

[프로그래머스 문제]

자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성

 

 

<모범 답안> - 삼항연산자 사용

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        System.out.print(n + " is "+(n % 2 == 0 ? "even" : "odd"));
    }
}

 

 

 

<내 답안> - IF문 사용

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        if (n%2 == 0) {
            System.out.printf("%d is even", n);
        } else if (n%2 == 1) {
          System.out.printf("%d is odd", n);  
        }
    }
}

IF문으로 길게 써야하는 내용을 삼항연산자를 통해 한줄로 표현할 수 있다!

 

자바 String 클래스 메서드 정리

친환경 개발자
|2024. 3. 30. 16:10

String 클래스란?

Java에서 문자열과 관련된 유틸리티 메서드를 모아둔 클래스

 

 

 

 

 

String 클래스 메서드 종류

  1. charAt(인덱스): 해당 인덱스에 있는 문자를 반환
  2. length(): 문자열의 길이를 반환
  3. substring(시작인덱스, 끝인덱스): 시작인덱스부터 끝인덱스 직전까지 문자열 반환, 끝인덱스 생략 시 끝까지 반환
  4. equals(객체): 주어진 객체와 문자열이 같은지 비교(true/false)
  5. indexOf(정수or문자): 문자열에서 해당 문자가 어느 위치에 있는지 인덱스값 반환(없을 경우 -1 반환) 
  6. contains(문자열): 해당 문자열이 포함되어 있는지 확인(true/false)
  7. toLowerCase() / toUpperCase(): 문자열을 소문자/ 대문자로 변환
  8. trim(): 문자열의 앞뒤 공백을 제거
  9. split(구분자): 문자열을 해당 구분자로 나누어 배열로 저장
  10. concat(문자열): 문자열을 이어붙임
  11. replace(변경전,변경후): 해당 문자열을 다른 문자열로 수정
  12. startswith(문자열): 해당 문자열로 시작하는지 여부 확인

 

 

 

 

 

관련 문제

 

[프로그래머스 문제]

문자열 my_string, overwrite_string과 정수 s가 주어지고, 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성하라

 

 

<모범 답안>

class Solution {
    public String solution(String my_string, String overwrite_string, int s) {
        String before = my_string.substring(0, s);     // 변경할 부분 직전까지의 문자열 추출
        String after = my_string.substring(s + overwrite_string.length());    // 변경할 부분 이후의 문자열 추출
        return before + overwrite_string + after; 
    }
}

 

<내 답안>

class Solution {
    public String solution(String my_string, String overwrite_string, int s) {
        String t = my_string.substring(s, s + overwrite_string.length());
        String answer = my_string.replace(t, overwrite_string);
        return answer;
    }


변경전 문자열에서 바꿀 문자열만큼 추출해서 변경하는 건 수행되지만,
만약 my_string의 바꿀 내용이 반복된다면, 반복되는 부분 모두가 같이 변경되어버려
오답임

 

 

Character  클래스란?

 Character 클래스는 Java에서 문자값과 관련된 유틸리티 메서드를 모아둔 클래스

 

 

Character 클래스 메서드 종류

  • isUpperCase(ch) : 문자 ch 값이 대문자인지 확인(true/false)
  • isLowerCase(ch) : 문자 ch 값이 소문자인지 확인(true/false)
  • isLetter(ch)  : 문자 ch 값이 문자인지 확인(true/false)
  • isDigit(ch) : 문자 ch 값이 숫자인지 확인(true/false)
  • isWhitespace(ch) : 문자 ch 값이 공백인지 확인(true/false)
  • isDefined(ch) : 문자 ch가 유니코드인지 확인(true/false)
  • toUpperCase(ch) : 문자 ch 값을 대문자로 변환하여 반환
  • toLowerCase(ch) : 문자 ch 값을 소문자로 변환하여 반환

 

 

관련 문제

 

[프로그래머스 문제]

영어 알파벳으로 이루어진 문자열 입력받은 후, 소문자는 대문자로, 대문자는 소문자로 변환하여 출력

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();

        StringBuffer result = new StringBuffer();   // 결과값 수정,추가를 위해 StringBuffer 선언

        for (int i=0; i<a.length(); i++) {
            char ch = a.charAt(i);     // ch 변수에 입력받은 문자를 한글자씩 불러옴
            if (Character.isUpperCase(ch)) {      // 대소문자 확인하여 변환
                result.append(Character.toLowerCase(ch));
            } else if (Character.isLowerCase(ch)) {
                result.append(Character.toUpperCase(ch));
            }
        }

        System.out.println(result);
    }
}

 

백준이나 프로그래머스 등 자바 프로그래밍 관련 문제를 풀 때,

 

초보자라면 궁금증한 것 중 하나가 바로

 

나눗셈 소수점 자리까지 값을 얻는 방법에 관한 것이다.

 

 

 

 

예를들어,

 

1 / 3 = 0.333333 의 값을 출력하고 싶은데,

 

자연스럽게 아래의 코드를 입력하면

 

출력값은 0.0이 나올 뿐이다.

 

int a = 1;
int b = 3;

double result = a / b;

System.out.println(result);  // 출력: 0.0

 

이렇게, 

 

result만 실수 타입으로 선언하면 소수점까지 쫙 나올 줄 알았는데,

 

출력은 0.0 으로 나온다.

 

 

 

 

결론적으로, 결과가 소수점까지 나오도록 하기 위해서는,

 

나누어주는 변수 a, b 둘 중 하나라도 실수형 타입이어야만

 

결과값이 소수점까지 표현이 된다.

 

 

따라서 아래와 같이 변경해주면 된다.

 

 

int a = 1;
double b = 3;

double result = a / b;

System.out.println(result);  // 출력: 0.3333333333333333

 

int a = 1;
int b = 3;

double result = (double) a / b;   // 정수 a를 실수형 타입으로 캐스팅(형 변환)

System.out.println(result);  // 출력: 0.3333333333333333 

 

 

 

 

 

 

그렇다면, a와 b를 실수형으로, result값을 정수형으로 선언하면 어떻게 될까?

 

자바 나눗셈 소수점까지 1

 

 

실수형끼리의 연산 시 기본적으로 실수형의 값이 반환되고,

 

실수형 값을 정수형 변수에 넣을 경우 캐스팅을 억지로 하지 않는 이상

 

위와 같은 에러가 발생한다!

 

※ 비교연산자

  • a = b : a와 b가 같다
  • a != b : a와 b는 같지 않다

 

※ and, or, not  연산자

  • a && b :  a, b 모두 참이어야 참    (and)
  •    a || b :  a, b 중 하나만 참이어도 참   (or)
  •         !a :  a가 거짓이면 참     (not)

 

※ break;와 continue;

  •  break: 해당 제어문 자체를 빠져나감 (제어문 끝, 다음 문장 수행)
  •  continue: 해당 제어문의 조건문으로 돌아감 (제어문 내의 조건문으로 즉, 제어문 처음부터 다시 수행)

 

■ If 문:

 

구조 : If - else if - else

 

 

If (조건문) {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
} else if (조건문) {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
} else if (조건문) {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
} else {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
}

 

 

■ switch / case 문:

 

입력 변수의 값이 해당 case의 입력값과 같으면 해당 문장을 수행한 뒤

break;문을 통해 switch문을 빠져나간다.

case 입력값 이외의 값에 해당할 경우에는 default: 문장을 수행함

 

switch (입력 변수) {
    case 입력값 1: <수행할 문장 1>;
        break;
    case 입력값 2: <수행할 문장 2>;
        break;


    ....


    default: <수행할 문장 n>;
        break;
}

 

■ while 문:

조건이 참인 동안 계속 수행됨

 

while (조건문) {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
}

 

 

■ for 문:

초깃값을 넣고, 조건문이 참일 때까지 값을 증가시키며 문장 반복

 

기본 구조
for (초깃값; 조건문; 증갓값;) {           ex) (int i=0; i < 10; i++)     >> 정수 i값이 0부터 i<10이 참인 동안 문장 수행 후 i값 1씩 증가
    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
}
for each문  >> 루프를 돌릴 수 있는 자료형(배열, 리스트 등)에서만 사용 가능
for (자료형 변수명 : 루프를 돌릴 객체 ) {          ex) (String a : numbers)     >> numbers라는 배열 혹은 리스트의 각 항목을
                                                                                                                          차례대로 a에 대입하여 수행

    <수행할 문장 1>;
    <수행할 문장 2>;
    ....
}

 

 

 print와 println 차이 :

  • print: 다음 출력 시 줄바꿈 없이 한 줄에 출력
  • println: 다음 출력 시 다음 줄로 넘어감

자바 자료형 정리(다시 정리)

친환경 개발자
|2024. 3. 17. 17:27

변수명 짓는 규칙

    1.  숫자로 시작 불가
    2.  특수문자는 _  &  만 가능
    3.  int, class, return 등 키워드는 변수명으로 사용 불가
    4.  카멜 케이스   ex) getBackGround

클래스명 짓는 규칙

  1.  명사로 할 것
  2.  대문자로 시작
  3.  파스칼케이스   ex) ChocoCookie

메서드짓는 규칙

  1.  동사로 할 것
  2.  소문자로 시작
  3.  카멜 케이스   ex) getBackGround

 

 

■ 원시 자료형(Primitive type) 과 참조 자료형(Reference type):

  • 원시자료형 : 변수에 실제 값을 가지는 자료형
  • 참조자료형 : 실제 값을 갖는 것이 아닌 데이터가 저장된 메모리의 주소 값을 가지는 자료형

 

      분 자료형명 자  료  형 특   징   용  예  시
원시
자료형
int 정수형 -2147483648 ~   2147483647 int a = 0;
long -9223372036854
 775808 ~
 9223372036854
 775807
long a = 123;
float 실수형 -3.4 *10^38 ~
 3.4*10^38
float a = 1.234;
double -1.7*10^308 ~
 1.7*10^308
double a = 1.234;
boolean True, False boolean a = true;
char 문자형 문자, 아스키코드, 유니코드 
(문자로 출력함)
char a = "d";
참조
자료형
String 문자열 원시자료형에
포함되지 않으나, 리터럴표기 가능
String a = "Geun";

자주 쓰는 메서드
- a.equals(b): a와 b가 같은지 (true/false)
- a.indexOf("문자열"): a에 특정 문자열이 시작되는 위치값 리턴
- a.contains("문자열): a에 특정 문자열이 포함되는지
- a.charAt(인덱스): 특정 인덱스에 위치한 문자 리턴
- a.replaceAll("문자열1","문자열2"): 문자열1을 문자열2로 바꿈
- a.substring(시작위치,끝위치): 해당위치의 문자값을 뽑아냄
- a.toUpperCase(): 모두 대문자로 변경
- a.split(":"): a의 문자들을 :로 나누어 문자열 배열로 리턴
StringBuffer 문자열 문자열 추가하거나 변경할 때 사용 StringBuffer sb = new StringBuffer();
sb.append("hello");     // sb에 문자열 추가
sb.append(" World");
String result = sb.toString();   // String 자료형으로 변경

 자주 쓰는 메서드
- sb.inesert(인덱스, "문자열"): 원하는위치에 특정문자열 삽입
- sb.substring(시작위치, 끝위치): 해당위치의 문자값 뽑아냄
type [] 배열 - 크기, 순서 O  String[], int[], float[]  ... = {1, 2, 3, 4, 5};

 자주 쓰는 메서드
a.length(): 배열의 길이 반
ArrayList 리스트 - 크기, 순서 X 
- 새로운 값 추가
  가능
 ArrayList<Integer> a = new ArrayList<>()  
 ArrayList<Integer> a = new ArrayList<>(Arrays.asList(1,23,326))   // 선언과 동시에 바로 값 넣을 수도 있음


 자주 쓰는 메서드
a.add(요솟값): 원하는 요솟값 추가
a.get(인덱스): 특정 인덱스 값 추출
a.size(): 요소의 개수 리턴
a.contains(요솟값): 특정 항목이 있는지 판별
a.remove(인덱스): 해당위치 항목 삭제, 그 요솟값 리턴
a.remove(객체): 해당 요솟값을 삭제, true/false리턴
String.join("구분자",리스트명): 해당 리스트에 구분자를 넣어
                                                             하나의 문자열로 만듦
a.sort(Comparator.naturalOrder()): 오름차순 정렬
                                       .reverseOrder()): 내림차순 정렬
HashMap key - value 쌍  HashMap<String, Integer> a = new HashMap<>()
                      key값   value자료형

 자주 쓰는 메서드
a.put(key값, value값): key와 value 추가
a.get(key값): key에 해당하는 value값 반환
a.getOrDefault(key값,얻을값): key에 해당하는 value값이 없을
                                                             때, null대신 얻을값을 반환
a.containsKey(key값): a에 해당 key 있는지 판별(true, false)
a.remove(key값): 해당 key의 항목을 삭제하고 value값 리턴
a.size(): a의 요소의 개수 리턴
a.keySet(): 모든 key값을 모아 집합 자료형으로 리턴
HashSet 집합 중복 X, 순서 X  HashSet a = new HashSet<>()

 

 

 

 

 

리터럴 표기란?

객체를 생성하지 않고 고정된 값을 그대로 대입하는 방식. 원시자료형에서 사용

    ex) String a = "Geun's blog"

          >> a라는 변수에 "Geun's blog"라는 문자열 값을 그대로 대입

 

 참조자료형에서는?

 new키워드를 사용하여 객체 만들어 사용. 객체 중심으로 코드 작성에 유리

    ex) String a = new String("Geun's blog")

          >> 항상 새로운 String 객체를 만든다.

 

 Wrapper 클래스

  원시자료형을 객체로 다루기 위해 객체화 시키는 클래스. 객체 지향 프로그래밍의 모든 기능을 활용할 수 있게 한다.

원시자료형 Wrapper 클래스
int Integer
long Long
double Double
float Float
boolean Boolean
char Char

 

 

형 변환

 (1) 문자열 → 정수 

       int n = Integer.parseInt(문자열)               

                 *정수 형태로 이루어진 문자열이어야 한다. (실수형태의 문자열은 정수형태로 변환 불가)

 

 (2) 정수 → 문자열

       String num = "" + (정수)                           *정수 앞에 빈 문자열("") 더하기

       String num = String.valueOf(정수)  

       String num = Integer.toString(정수)   

 

 (3) 실수 → 정수

       int n = (int) (실수)                                     *실수 앞에 (int) 붙임

만들 프로그램

 양의 정수를 입력받고, 입력받은 수의 자릿수를 출력

 

 

내가 작성한 코드

  • 메서드명 : getCount
  • 입력받는 값은 양의 정수(a)
  • 출력하는 값은 숫자 개수

 

처음엔 10 미만일 경우 1자리, 100 미만일 경우 2자리...로 생각하였으나,

무한한 자릿수를 나타낼 수 없어 문자열로 변환하고 글자수를 세는 방법을 생각하게 됨

 

public class Problem3 {

    static int getCount(int a) {
        String result = "" + a;
        return result.length();
    }

    public static void main(String[] args) {
        System.out.println("자릿수: "+getCount(3));
        System.out.println("자릿수: "+getCount(23));
        System.out.println("자릿수: "+getCount(2352));
        System.out.println("자릿수: "+getCount(462643));
    }
}

 

>> 출력:

자릿수: 1
자릿수: 2
자릿수: 4
자릿수: 6

 

 

모범 답안

1. 입력값을 몫이 0이 될때까지 10으로 나누고, 나눈 총횟수를 자릿수로서 리턴

public class Problem3_A {
    static int getDigitCount(int n) {
        int count = 1;
        while (true) {
            if (n == 0) {
                break;
            }
            n /= 10;     → 숫자 n을 10으로 나누고 그 값을 다시 숫자 n에 대입
            count++;
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println("자릿수: "+getDigitCount(3));
        System.out.println("자릿수: "+getDigitCount(23));
        System.out.println("자릿수: "+getDigitCount(2352));
        System.out.println("자릿수: "+getDigitCount(462643));
    }
}

 

>> 출력:

자릿수: 1
자릿수: 2
자릿수: 4
자릿수: 6

 

2. 10으로 나눴을 때 몫이 0이 될때까지 계속 나누고, 나눈 총횟수를 자릿수로서 리턴

public class Problem3_A {

    static int getDigitCount(int n) {
        String result = "" + n;    → 정수를 문자열로 변환
        return s.length();     → 문자열의 글자 수를 리턴
    }

    public static void main(String[] args) {
        System.out.println("자릿수: "+getCount(3));
        System.out.println("자릿수: "+getCount(23));
        System.out.println("자릿수: "+getCount(2352));
        System.out.println("자릿수: "+getCount(462643));
    }
}

 

>> 출력:

자릿수: 1
자릿수: 2
자릿수: 4
자릿수: 6

 

만들 프로그램

게시물의 총 개수한 페이지에 보여 줄 게시물 수입력했을 때 총 페이지 수출력하는 프로그램

 

 

내가 작성한 코드

import java.util.Scanner;

public class Problem2 {
    static int getTotalPage(int m, int n) {
        int result = 0;
        if (m % n == 0) {
            result = m / n;
        } else if(m % n != 0) {
            result = (m / n) + 1;
        }
        return result;
    }

    public static void main(String[] args) {
        Scanner sc1 = new Scanner(System.in);
        Scanner sc2 = new Scanner(System.in);

        System.out.print( "총 게시물 수 : ");
        int m = sc1.nextInt();
        System.out.print( "한 페이지에 보여줄 게시물 수 : ");
        int n = sc2.nextInt();

        System.out.print("총 페이지 수 : " + getTotalPage(m, n));
    }
}

 

>> 출력:

총 게시물 수 : 102
한 페이지에 보여줄 게시물 수 : 10
총 페이지 수 : 11

 

 

 

모범 답안

public class Problem2_A{
    static int getTotalPage(int m, int n) {     → static 메서드로 생성해야 객체 생성 없이 바로 해당 메서드 호출 가능
        if (m % n == 0) {
            return m / n;       → 굳이 result 변수 생성하지 않고 바로 결과값 반환
        } else {
            return m / n + 1;
        }
    }

    public static void main(String[] args) {
        System.out.println(getTotalPage(5, 10));
        System.out.println(getTotalPage(15, 10));
        System.out.println(getTotalPage(25, 10));
        System.out.println(getTotalPage(30, 10));
    }
}

 

>> 출력:

1

2

3

3