• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BOJ
    • Programmers
    • SWEA
    • LeetCode
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Server
      • Server
      • Spring
      • NodeJS
    • DataBase
      • DataBase
      • MySQL
      • MongoDB
  • Programming
    • Programming
    • Java
    • JS
    • Python
    • CleanCode
  • ComputerScience
    • DataStructure
    • Algorithm

[BOJ] 1744. 수 묶기

15 Apr 2026

Reading time ~1 minute

  • 풀이

풀이

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		for(int i = 0; i < n; i++) {
			arr[i] = sc.nextInt();
		}
		
		Arrays.sort(arr);		
		int answer = plusSum(arr) + minusSum(arr);											
		System.out.println(answer);
	}
	
	public static int plusSum(int[] arr) {		
		int plus_index = findPlusIndex(arr);
		if(arr[arr.length - 1] <= 0) return 0;
		int temp = (arr.length - 1) % 2;
		int after_index_value = 0;
		int sum = 0;				
		for(int i = arr.length - 1; i > plus_index; i--) {
			if(i % 2 == temp) after_index_value = arr[i];
			else sum += Math.max(arr[i] * after_index_value, arr[i] + after_index_value); 
		}
		if((plus_index + 1) % 2 == temp) sum += arr[plus_index + 1];
		return sum;
	}
	
	public static int minusSum(int[] arr) {
		int minus_index = findMinusIndex(arr);
		if(arr[0] >= 0) return 0;
		int before_index_value = 0;
		int sum = 0;
		for(int i = 0; i < minus_index; i++) {
			if(i % 2 == 0) before_index_value = arr[i];
			else sum += before_index_value * arr[i];
		}
		if((minus_index - 1) % 2 == 0) {
			if(!isExistsZero(arr)) sum += arr[minus_index - 1];			
		}
		return sum;
	}
	
	public static int findMinusIndex(int[] arr) {
		int minus_index = arr.length;
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] >= 0) {
				minus_index = i;
				break;
			}
		}
		return minus_index;
	}
	
	public static int findPlusIndex(int[] arr) {
		int plus_index = -1;
		for(int i = arr.length - 1; i >= 0; i--) {
			if(arr[i] <= 0) {
				plus_index = i;
				break;
			}
		}
		return plus_index;
	}
	
	public static boolean isExistsZero(int[] arr) {
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == 0) {
				return true;
			}
		}
		return false;
	}
}


그리디많은 조건 분기정렬 Share