강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của dnwls4884491
dnwls4884491

câu hỏi đã được viết

Bài kiểm tra lập trình Java - Chủ đề doanh nghiệp IT lớn

5. Giải thích code "dãy số bitonic có độ dài tối đa"

5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다

Viết

·

305

·

Đã chỉnh sửa

0

안녕하세요 수업 강의를 보다가, 풀어주신 방법이 저와 다르고 for 문 하나만으로 해결이 가능하지 않나 싶어서 확인차 질문 드려봅니다.

pdf 상의 정답은 모두 맞춘 상태입니다. 간단하게 하라도 피드백 주신다면 감사합니다

class Solution5 {
	public static int solution(int[] nums){

		// answer : 정답
		// len : 현재 수열 길이
		// d : 현재 수열의 방향 ( 0: 증가, 1: 감소)
		// prevNum : 이전 숫자
		 
		int answer = 0, len = 0, d = 0, prevNum = Integer.MIN_VALUE;
		
		for (int num : nums) {

			if (d == 0) {
				// 1. 현재 수열이 증가하고 있는 상황

				// 2. 수열이 증가하고 있는 상황에서의 시뮬레이션
				if (prevNum > num) {
					// 이전 숫자보다 작을 경우, 수열의 방향을 감소로 변경
					d = -1;	
				} else if (prevNum == num) {
					// 이전 숫자와 값이 같을 경우, 바이토닉 수열이 아니므로 길이 초기화
					len = 0;
				}

				// 길이 증가
				len++;
			} else {
				// 1. 현재 수열이 감소하고 있는 상황

				// 2. 수열이 감소하고 있는 상황에서의 시뮬레이션
				if (prevNum > num) {
					// 2-1. 이전 숫자보다 작을 경우, 길이 증가
					len++;	
				} else {
					// 2-2. 이전 숫자보다 크거나, 같을 경우 수열이 끝났다고 판단

					// 2-2-1. 현재까지의 길이를 계산하여 더 길면 정답으로 변경
					if (answer < len) {
						answer = len;
					}

					// 2-2-2. 초기화
					len = 1; // 현재 숫자부터 다시 시작하므로 값은 1
					d = 0;

					// 2-2-3. 현재 숫자 이전의 값을 비교했을 때, 증가하고 있었다면 길이 하나 증가
					if (prevNum < num) {
						len++;
					}
				}
			}
			
			prevNum = num;
		}

		// 현재 진행중이던 수열이 감소하고 있고 길이가 정답보다 크다면, 정답으로 변경
		if (answer < len && d == -1) {
			answer = len;
		}
				
		return answer;	
	}

	public static void main(String[] args){
		Solution5 T = new Solution5();
		System.out.println(Solution5.solution(new int[]{1, 2, 1, 2, 3, 2, 1}));
		System.out.println(Solution5.solution(new int[]{1, 1, 2, 3, 5, 7, 4, 3, 1, 2}));
		System.out.println(Solution5.solution(new int[]{3, 2, 1, 3, 2, 4, 6, 7, 3, 1}));
		System.out.println(Solution5.solution(new int[]{1, 3, 1, 2, 1, 5, 3, 2, 1, 1}));
	}
}
java코딩-테스트

Câu trả lời 1

0

안녕하세요, 인프런 AI 인턴입니다.

코드 잘 확인하였습니다. 꾸준히하면언젠간님의 구현 방식도 올바른 방향성을 가지고 있습니다. 바이토닉 수열의 특성에 맞게 증가 상황과 감소 상황을 나누어 처리하고, 방향 전환 시점을 적절히 파악하여 상태를 전환하는 로직을 구현하셨네요.

올려주신 코드대로라면 수열을 한 번의 순회로 바이토닉 수열의 최대 길이를 알아낼 수 있습니다. lend를 이용하여 현재 수열의 길이와 바이토닉 상태를 관리하고 있으며, 증가 혹은 감소 상황에 따라 조건을 처리하는 방식이 잘 구현되어 있습니다.

다만, 주어진 문제의 조건이나 강의에서 제시된 방법론과 차이가 있다면 해당 방법론에 대해서도 이해하고 있는 것이 추후 유사 문제에 대한 접근법을 다양화하는데 도움이 될 것입니다.

각 경우의 수에 대한 조건 처리가 잘 되어 있으나 논리적으로 맞는지 한번 더 검토해 보시고, 가능하다면 몇 가지 테스트 케이스를 추가하여 꼼꼼히 검증해 보시길 권장합니다.

좋은 질문 감사합니다. 추가적인 궁금증이 있다면 언제든 문의해 주세요!

Hình ảnh hồ sơ của dnwls4884491
dnwls4884491

câu hỏi đã được viết

Đặt câu hỏi