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
자바 프로그램 만들기 : 구구단 프로그램 만들기
프로그램을 만들 때 가장 먼저 생각할 것: 입력과 출력 어떤 값이 입력값으로 주어지고, 어떻게 출력되어야 할 지를 가장 먼저 생각하라 구구단 프로그램 만들기 구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할지 생각 메서드 이름 ? gugudan 입력값 ? 2 출력값? 2단(2, 4, 6, 8, 10 ..., 18) 결과값 자료형? 배열 (1) gugudan 메서드에 2를 입력값으로 주면 result라는 변수에 결괏값을 넣는 코드 입력해보기 public class Gugudan { public static void main(String[] args) { result = gugudan(2); } } (2) 결괏값을 어떤 형태로 받을 것인가? 정수형 배열이 적합하다고 판단, ..
2024.03.12
자바 공부 29: 스트림
스트림이란? Java8에서 도입된 새로운 기능 간결하고 가독성 있는 코드 작성 가능 주요 특징 데이터의 흐름을 표현하여, 일관되고 간결한 방식으로 다룰 수 있음 내부 반복 요소들을 줄여 편리 결과가 필요한 시점까지 연산을 수행하지 않음 > 성능 최적화 예시 스트림을 사용하여 배열에서 짝수를 걸러내고, 역순으로 정렬 import java.util.Arrays; import java.util.Comparator; public class Stream { public static void main(String[] args) { int[] data = {5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8}; int[] result = Arrays.stream(data) // IntStream을 생성한다 .b..
2024.03.08

자바 삼항연산자 사용법

친환경 개발자
|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

 

프로그램을 만들 때 가장 먼저 생각할 것: 입력과 출력

 

어떤 값이 입력값으로 주어지고, 어떻게 출력되어야 할 지를 가장 먼저 생각하라

 

 

 

 

구구단 프로그램 만들기

 

구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할지 생각

메서드 이름 ? gugudan

입력값 ? 2

출력값? 2단(2, 4, 6, 8, 10 ..., 18)

결과값 자료형? 배열

 

(1) gugudan 메서드에 2를 입력값으로 주면 result라는 변수에 결괏값을 넣는 코드 입력해보기

 

public class Gugudan {
    public static void main(String[] args) {
        result = gugudan(2);
    }
}

 

 

 

(2) 결괏값을 어떤 형태로 받을 것인가?

 

정수형 배열이 적합하다고 판단, int[] result = {2, 4, 6 ...., 18}과 같은 결과를 얻을 것이라고 생각하고 프로그래밍 시작

 

 

 

(3) 본격적인 프로그램 작성 시작 > gugudan 메서드 만들기

 

public class Gugudan {

    static int[] gugudan(int dan) {
        System.out.println(dan);
         return null;
    }

public static void main(String[] args) {
       
 result = gugudan(2);
    }
}

 

>> 출력 : 2

 

 

(4) 결과값을 담을 정수 배열 생성

 

public class Gugudan {

    static int[] gugudan(int dan) {

        int[] result = new int[9];         → 총 9단이므로 [9]배열 생성
        return result;         → 정수형 배열 리턴
    }

    public static void main(String[] args) {
        result = gugudan(2);    }
}

 

 

(5) result에 해당 구구단 값을 어떻게 넣어야 할 지 생각해보자. > for문 사용하기

 

public class Gugudan {
    static int[] gugudan(int dan) {
        int result[] = new int[9];
        for(int i=0; i<result.length; i++) {
            result[i] = dan * (i+1);
        }
        return result; 
    }

    public static void main(String[] args) {
        int[] result = gugudan(2);  
        for (int a:result) {
            System.out.println(a);
        }
    }
}

 

>> 출력 : 

2

4

6

...

18

 

 

 

(6) 입력받을 수 있도록 Scanner 구문 추가

 

>> 최종본

import java.util.Scanner;

public class Gugudan {
    static int[] gugudan(int dan) {
        int result[] = new int[9];
        for(int i=0; i<result.length; i++) {
            result[i] = dan * (i+1);
        }
        return result;
    }

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

        System.out.print("구구단 몇단 출력할까요? : ");
        int[] result = gugudan(sc.nextInt());
        for (int a:result) {
            System.out.println(a);
        }
    }
}

자바 공부 29: 스트림

친환경 개발자
|2024. 3. 8. 01:53

스트림이란?

Java8에서 도입된 새로운 기능

간결하고 가독성 있는 코드 작성 가능

 

 

 

 

주요 특징

  • 데이터의 흐름을 표현하여, 일관되고 간결한 방식으로 다룰 수 있음
  • 내부 반복 요소들을 줄여 편리
  • 결과가 필요한 시점까지 연산을 수행하지 않음 > 성능 최적화

 

 

예시

스트림을 사용하여 배열에서 짝수를 걸러내고, 역순으로 정렬

import java.util.Arrays;
import java.util.Comparator;

public class Stream {
    public static void main(String[] args) {
        int[] data = {5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8};

        int[] result = Arrays.stream(data)     // IntStream을 생성한다
                .boxed()   // IntStream을 Stream<Integer>로 변경한다.
                .filter((a) -> a % 2 == 0)   // 짝수만 뽑아낸다.
                .distinct()   // 중복을 제거한다.
                .sorted(Comparator.reverseOrder())  // 역순으로 정렬한다.
                .mapToInt(Integer::intValue)  // Stream<Integer>를 IntStream으로 변경한다.
                .toArray()   // int[]배열로 반환한다.
                ;

        for (int value : result) {
            System.out.print(value + " ");}
    }
}