JavaRush /Java Blog /Random-KO /커피 브레이크 #110. 배열에서 세 번째로 큰 숫자를 찾는 방법에 대한 문제를 해결합니다. Java에...

커피 브레이크 #110. 배열에서 세 번째로 큰 숫자를 찾는 방법에 대한 문제를 해결합니다. Java에서 문자열 뒤집기

Random-KO 그룹에 게시되었습니다

배열에서 세 번째로 큰 숫자를 찾는 방법

출처: Dev.to 해결해야 할 문제가 있습니다. 정렬되지 않은 정수 배열이 제공됩니다. 배열에서 세 번째로 큰 숫자를 찾는 방법은 무엇입니까? 참고: 배열에는 중복 값과 음수 값이 모두 포함되어 있으며 배열 길이가 N배 증가하는 경우에도 이 코드가 작동합니다. 커피 브레이크 #110.  배열에서 세 번째로 큰 숫자를 찾는 방법에 대한 문제를 해결합니다.  Java에서 문자열 반전 - 1해결책은 Java로 제공됩니다.

예 1: 음수 값이 있는 정렬되지 않은 배열

입력: [87, 99, -14, 05, 46, 54] 코드:
public class ThirdLargestNumInArray {

    public static void main(String[] args) {

        /*
         * unsorted Array with duplicate and negative values
         */
        Integer arr[] = { 87, 99, -14, 05, 46, 54 };

        /* Variable initialization */
        int largest = 0, secondLargest = 0, thirdLargest = 0;

        /* Condition to find */
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > largest) {
                /*
                 * if condition is true assign large value to second large value
                 */
                secondLargest = largest;

                /* assign new large value */
                largest = arr[i];

            } else if (arr[i] > secondLargest) {
                /*
                 * if condition is true assign second large value to third large value
                 */
                thirdLargest = secondLargest;

                /* assign new second large value */
                secondLargest = arr[i];

            } else if (arr[i] > thirdLargest) {
                /*
                 * if condition is true the third largest value will be assigned
                 */
                thirdLargest = arr[i];
            }
        }

        /* Print the values */
        System.out.println("Largest = " + largest);
        System.out.println("Second Largest = " + secondLargest);
        System.out.println("Third Largest = " + thirdLargest);

    }
}
결론:
가장 큰 = 99 두 번째로 큰 = 87 세 번째로 큰 = 54
설명:
  1. 위에서 언급한 것처럼 배열은 양수 값과 음수 값 모두로 초기화됩니다.

  2. 가장 큰 값, 두 번째로 큰 값, 세 번째로 큰 값을 각각 저장하도록 변수를 초기화합니다. 참고: 변수는 특별한 경우에 0으로 초기화됩니다. 세 번째 최대 요소가 배열에 없으면 0을 반환합니다.

  3. 세 개의 가장 큰 값을 찾기 위해 루프 N(배열의 길이)을 여러 번 반복합니다.

  4. 조건이 두 번째 큰 값에 가장 큰 값을 할당하고 배열에서 새로운 큰 값을 초기화하는 것인 경우.

    첫 번째 elseif 조건 은 두 번째 큰 값을 세 번째 큰 값에 할당하고 배열에서 새로운 두 번째 큰 값을 초기화하는 것입니다.

    두 번째 elseif 조건은 배열의 세 번째 큰 값을 할당하는 것입니다.

  5. 마지막으로 변수를 인쇄합니다.

예 2: 음수 및 중복 값이 ​​있는 정렬되지 않은 배열

입력: [77, 101, 95, 14, 05, 46, -47, 94, 00, 95, 52, 86, 36, -54, 94, 89] 코드:
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class ThirdLargestNumInSet {

    public static void main(String[] args) {

        /*
         * unsorted Array with duplicate and negative values
         */
        Integer arr[] = { 77, 101, 14, 05, 46, -47, 94, 00, 95, 52, 86, 36, -54, 94, 89 };

        /* Variable initialization */
        int largest = 0, secondLargest = 0, thirdLargest = 0;

        /*
         * using LinkedHashSet - Map to remove duplication in Array
         */
        Set<Integer> newSet = new LinkedHashSet<>();

        for (int i = 0; i < arr.length; i++) {
            newSet.add(arr[i]);
        }

        /* Condition to find */
        for (Integer i : newSet) {
            if (i > largest) {
                /*
                 * if condition is true assign large value to second large value
                 */
                secondLargest = largest;

                /* assign new large value */
                largest = i;

            } else if (i > secondLargest) {
                /*
                 * if condition is true assign second large value to third large value
                 */
                thirdLargest = secondLargest;

                /* assign new second large value */
                secondLargest = i;

            } else if (i > thirdLargest) {
                /*
                 * if condition is true the third largest value will be assigned
                 */
                thirdLargest = i;
            }
        }

        /* Print the values */
        System.out.print("Largest = " + largest);
        System.out.print("\nSecond Largest = " + secondLargest);
        System.out.print("\nThird Largest = " + thirdLargest);
    }
}
결론:
가장 큰 = 101 두 번째로 큰 = 95 세 번째로 큰 = 94
설명: 두 코드에 사용된 의사 코드는 동일합니다. 예제 2의 유일한 차이점은 LinkedHashSet을 사용한다는 것입니다. 이는 배열에서 중복 값을 제거하는 고유한 개체를 저장하는 Java 컬렉션입니다.

또 다른 해결책:

버블 정렬 알고리즘(가장 낮은 순서에서 가장 높은 순서로 정렬)을 사용하여 배열을 정렬하고 배열의 가장 큰 값을 찾을 수 있습니다. 입력: [87, 99, 14, 05, 46, 54] 코드:
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class Main {

    public static void bubblesort(Integer[] arr) {

        int n = arr.length;
        int temp;

        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

            }
        }

    }

    public static void main(String[] args) {

        Integer[] arr = { 87, 99, 14, 05, 46, 54 };

        bubblesort(arr);

        System.out.print("array after sorting : ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

        int n = arr.length;

        int max = arr[n - 3];
        System.out.println("\n3rd largest value: " + max);
    }

}
결론:
정렬 후 배열 : 5 14 46 54 87 99 세 번째로 큰 값 : 54

Java에서 문자열 뒤집기

출처 : Dev.to

StringBuilder를 사용하여 문자열을 뒤집는 Java 프로그램

설명: 문자열은 문자 배열에 의해 내부적으로 지원되는 Java의 개체입니다. 배열은 변경할 수 없기 때문에 문자열은 변경할 수 없습니다(수정이 불가능함). 행을 변경할 때마다 새 행이 생성됩니다. 우리의 경우에는 변경 가능한 StringBuilder를 사용하고 있습니다 . 참고: StringBuffer 클래스를 사용할 수도 있습니다 . 암호:
public class ReverseStringBuilder {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Create StringBuilder(mutable) object */
        StringBuilder s1 = new StringBuilder();

        /* Using append() and reverse() in StringBuilder */
        s1.append(name);
        s1 = s1.reverse();

        /* Print the reverse */
        System.out.println(s1);

    }

}
결론:
emordnilaP
시퀀싱:
  1. String 클래스 의 객체를 생성 하고 초기화합니다.

  2. 문자열 빌더 클래스 의 객체를 만듭니다 .

  3. 내장 문자열 작성기 인 add()reverse() 함수를 사용하십시오 .

  4. 문자열 작성기 개체를 인쇄합니다 .

내장 함수 String reverse()를 사용하지 않고 문자열을 뒤집는 Java 프로그램

방법 1

설명: toCharArray() 함수는 이 문자열을 문자 배열로 변환하는 데 사용됩니다. 그런 다음 for 루프를 사용하여 각 문자를 역순으로 살펴보고 각 문자에 대한 출력을 얻습니다. 암호:
public class Reverse {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Using toCharArray() function */
        char[] ch = name.toCharArray();

        /* Temp string */
        String rev = "";

        /* Iterating for loop in reverse to store */
        for (int i = ch.length - 1; i >= 0; i--) {
            /* Concatenating Strings */
            rev += ch[i];
        }

        /* Print the reverse */
        System.out.println(rev);

    }

}
결론:
emordnilaP
시퀀싱:
  1. String 클래스 의 객체를 생성 하고 초기화합니다.

  2. 문자 배열을 만들고 String 객체를 사용 하여 toCharArray() 함수를 호출합니다 .

  3. 임시 변수에 대한 String 개체를 만듭니다 .

  4. for 루프를 역방향으로 반복하여 각 문자를 역순으로 가져옵니다.

  5. 각 문자를 Temp 변수로 연결합니다 .

  6. 온도를 입력합니다 .

방법 2

설명: for 루프를 사용하여 문자열을 역순으로 인쇄했습니다. 반면에 charAt(index) 메서드는 주어진 인덱스에 있는 문자를 반환합니다. 문자열 변수를 변경하기 위해 각 반복 후에 문자가 연결됩니다. 암호:
public class ReverseCharAt {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Temp string */
        String rev = "";

        /* Iterating for loop in reverse to store */
        for (int i = name.length() - 1; i >= 0; i--) {
            /* Concatenating Strings */
            rev = rev + name.charAt(i);
        }

        /* Print the reverse */
        System.out.println(rev);

    }

}
결론:
emordnilaP
시퀀싱:
  1. String 클래스 의 객체를 생성 하고 초기화합니다.

  2. 임시 변수에 대한 String 개체를 만듭니다 .

  3. for 루프를 역순으로 반복하여 각 문자를 역순으로 가져옵니다.

  4. charAt() 함수를 호출하여 각 문자를 Temp 변수로 연결합니다 .

  5. Temp 를 인쇄합니다 .

특별 참고 사항: 역방향 함수에 익숙할 수도 있지만 여기서의 목표는 StringBuilder 의 기능 과 역방향 함수 없이 코드를 최적화할 수 있는 방법을 살펴보는 것입니다. 이것이 미래에 누군가에게 도움이 되기를 바랍니다!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION