삐까냥의 파도타기

14888번) 연산자 끼워넣기 본문

코딩/삼성 SW 역량 테스트 기출

14888번) 연산자 끼워넣기

금손형아 2018. 4. 6. 22:57

문제 출처 : https://www.acmicpc.net/problem/14888


DFS죠??


2018년 4월 6일 - 다듬지 않은 시험용 코드 (소요시간 : 29분) 


public class Q14888 {

static int max = 0, min = 0;

static int maxCount;

static int[] operator, values;

static boolean isFirst = true;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int size = sc.nextInt();

values = new int[size];

for (int i = 0; i < size; i++) {

values[i] = sc.nextInt();

}

maxCount = 0;

operator = new int[4];

for (int i = 0; i < 4; i++) {

int temp = sc.nextInt();

operator[i] = temp;

maxCount += temp;

}

for (int i = 0; i < 4; i++) {

if (operator[i] > 0) {

operator[i] -= 1;

calResult(1, i, values[0]);

operator[i] += 1;

}

}

System.out.println(max + "\n" + min);

}


static void calResult(int count, int what, int result) {

switch (what) {

case 0:

result += values[count];

break;

case 1:

result -= values[count];

break;

case 2:

result *= values[count];

break;

case 3:

if (result >= 0) {

result /= values[count];

} else {

result *= -1;

result /= values[count];

result *= -1;

}

break;

}

if (count == maxCount) {

if (!isFirst) {

if (result > max) {

max = result;

}

if (result < min) {

min = result;

}

} else {

isFirst = false;

max = result;

min = result;

}

return;

}

for (int i = 0; i < 4; i++) {

if (operator[i] > 0) {

operator[i] -= 1;

calResult(count+1, i, result);

operator[i] += 1;

}

}

}

}




2018년 4월 12일 - 다듬지 않은 코드 (소요시간 : 27분)


import java.util.Scanner;


public class Q14888 {


static long[] values;

static int[] operator = new int[4];

static int size;

static long min = -1, max = -1;

static boolean isFirst = true;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

size = sc.nextInt();

values = new long[size];

for (int i = 0; i < size; i++) {

values[i] = sc.nextInt();

}

for (int i = 0 ; i < 4; i++) {

operator[i] = sc.nextInt();

}


doCal(values[0], 1);

System.out.println(max + "\n" + min);

}

static void doCal(long result, int count) {

// System.out.println(result);

if (count == size) {

// System.out.println(tempResult);

if (isFirst) {

isFirst = false;

min = result;

max = result;

return;

}

if (min > result) {

min = result;

}

if ( max < result) {

max = result;

}

return;

}

for (int i = 0; i < 4; i++) {

if (operator[i] > 0) {

operator[i] -= 1;

long tempResult = getCalResult(result, i, values[count]);

doCal (tempResult, count+1);

operator[i] += 1;

}

}

}

static long getCalResult(long nowNum, int what, long nextNum) {

switch (what) {

//+

case 0 :

nowNum += nextNum;

break;

//-

case 1 :

nowNum -= nextNum;

break;

//*

case 2 :

nowNum *= nextNum;

break;

//나누기

case 3 :

if (nowNum > 0) {

nowNum /= nextNum;

} else {

nowNum *= -1;

nowNum /= nextNum;

nowNum *= -1;

}

break;

}

return nowNum;

}



'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글

14501번) 퇴사  (0) 2018.04.07
14891번) 톱니바퀴  (0) 2018.04.07
14503번) 로봇 청소기  (0) 2018.04.06
14889번) 스타트와 링크  (0) 2018.04.06
14890번) 경사로  (0) 2018.04.06