주식투자

문제설명

김코딩이라는 개미투자자가 주식에 투자하려고 합니다. 이 투자자가 투자한 돈의 액수와 그 주식의 하루간의 변동을 퍼센트로 알 때, 이 투자자의 순수익과 이득/손해 판단을 출력하세요.

입력설명

첫번째줄에 투자액 a가 입력됩니다. (100 <= a <= 10,000)

둘번째줄에 투자 일 수 b가 입력됩니다.(1 <= b <= 10)

세번째줄에 일별 변동폭인 데이터가 날짜 갯수(b개)만큼 퍼센트 정수로 입력됩니다. (변동폭는 음수도 될 수 있습니다.) ( 범위 -100 ~ +100)

출력설명

이 사람의 순수익(=총 수익(최종 값) - 총 비용(투자한 액수))을 소수점 첫째 자리에서 반올림하여 첫째 줄에 출력한다.

그리고 다음 줄에 이 사람이 이득일 경우 "good", 본전일 경우 "same", 손해일 경우 "bad"를 출력하세요.

만약 0.5>순수익>-0.5이면 순수익은 0으로 봅니다.

입력예시

10000

4

10 -10 5 -5

출력예시

-125

bad

for
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

23개의 풀이가 있습니다. 1 / 3 Page

java입니다.

public void calc()
    {
        double changed = money;
        int profit;

        for(int i=0; i<days; i++)
        {
            changed = changed + (changed * fluctuation[i] * 0.01);
        }
        profit = (int) Math.round((changed - money));

        System.out.println("순수익 : " + profit);

        if(profit >= -0.5 && profit <= 0.5)
            System.out.println("Same");
        else if(profit > 0.5)
            System.out.println("Good");
        else
            System.out.println("Bad");
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

C로 풀었습니다. 다른 부분은 쉬웠는데 소수점 반올림 부분에서 고민했네요..

int money, day, i;
    double profit=0, changed_money=0;
    int arr[10];

    while(1){
        printf("투자액 입력");
        scanf_s("%d", &money);
        if(money < 100 || money >10000){
            fprintf(stderr, "투자액 에러\n");
            continue;
        }
        printf("투자 일 수 입력");
        scanf_s("%d", &day);
        if(day <=0 || day > 10){
            fprintf(stderr, "투자 일 수 에러\n");
            continue;
        }
        printf("일별 변동폭 데이터를 투자 일 수만큼 입력(변동폭은 음수도 가능)\n");
        for(i=0; i<day; i++)
            scanf_s("%d", &arr[i]);

        changed_money=money;
        for(i=0; i<day; i++)
            changed_money=changed_money + (changed_money * arr[i] * 0.01);

        profit= (changed_money - money);

        if(profit >= 1){
            printf("\n순수익\n");
            printf("%d\n", (int)(profit+0.5));
            printf("Good\n");
            break;
        }else if(-1 < profit && profit <1){
            printf("\n순수익\n");
            if(profit < 0){
                profit= -profit;
                profit= profit+0.5;
                profit= -profit;
                printf("%d\n", (int)profit);
            }
            printf("%d\n", (int)(profit+0.5));
            printf("Same\n");
            break;
        }else{
            printf("\n순수익\n");
            if(profit < -1){
                profit= -profit;
                profit= profit+0.5;
                profit= -profit;
            }
            printf("%d\n", (int)profit);
            printf("Bad\n");
            break;
        }
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

너무 쉬워요.

inv_amt = input("Invest Amount? ")
inv_day = input("Days? ")
inv_profit = input("Profit rates? ").split(" ")
#print(inv_profit)

def real_profit(a, d, p):
    sum_profit = a
    for i in range(d):
        profit = sum_profit * int(p[i]) / 100
        sum_profit += profit
        print("%d day: %d" %(i,sum_profit))
    return sum_profit

profit = real_profit(inv_amt, inv_day, inv_profit)
print("Total: %d" %profit)
if profit > 0:
    print("Good!!!")
elif profit == 0:
    print("So so...")
elif profit < 0:
    print("Bad!!!")
그러게요. 이게 왜 레벨 3 인지 흠흠흠 - rootcucu, 2015/05/10 20:26 M D
난이도는 투표를 통해서 결정되는데요, 현재 투표자수가 너무 적어서 레벨이 좀 높게 설정되었나 보네요.. - 길가의풀, 2015/05/12 00:10 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
#include <cmath>
#define D(x)    x > 0 ? cout << "good" << endl : cout << "bad" << endl
using namespace std;

inline double cal(double x,double y);
inline double halfup(double z);

int main()
{
    int b=0,i;
    double a,temp;

    do {
        cout << "투자액 입력(100 <= a <= 10,000) : ";
        cin >> a;
    } while (a > 10000 || a < 100);
    temp = a;

    do {
        cout << "투자 일 수 입력(1 <= b <= 10) : ";
        cin >> b;
    } while (b > 10 || b < 1);
    double dnum[b];

    for (int i=0;i<b;(dnum[i] >= -100 && dnum[i] <= 100) ? i++ : i){
        cout << i+1 << "번째 입력: ";
        cin >> dnum[i];
    }

    for (int j=0;j<b;j++)
        a = cal(a,dnum[j]);
    double pf = halfup((a - temp));

    cout << "순 이익 : " << pf << endl;
    ((a - temp) > -0.5 && (a - temp < 0.5)) ? cout << "same" << endl : D(pf);
}

inline double cal(double x,double y)
{
    double num;
    y >= 0 ? num = (x + (x * (y / 100))) : num = (x + (x * (y / 100)));
    return num;
}

inline double halfup(double z)
{
    z = z - 0.5;
    return ceil(z);
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

# 파이썬

money=int(input("Invest money?:"))
day=int(input("Invest day?:"))
result=[]
for i in range(day):
        r=float(input("Please write %d day rates?:" %(i+1)))
        result.append(r)

def stock(a,d,p):
    first_money=a
    for i in range(d):
        m=first_money*int(p[i])/100
        first_money +=m
        print("%d day: %d" %(i+1,first_money))
    return first_money

print("")
print("-------Profit money--------")
t=stock(money,day,result)
print("Total: %d" %t)

a=t-money
if a>0:
    print("Good!!")
elif a==0:
    print("So so...")
elif a<0:
    print("Bad!!")

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
int main(){
    double a,j,c;
    int b,i;
    scanf("%lf%d",&a,&b);
    j=a;
    for(i=0;i<b;i++)
    {
        scanf("%lf",&c);
        a*=(c/100+1);
    }
    printf("%.0f\n",a-j);
    if(a-j<0) printf("bad");
    if(a-j==0) printf("same");
    if(a-j>0) printf("good");
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class Stock {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money = Integer.parseInt(sc.nextLine()); 
        double d = money + 0d;
        int days = Integer.parseInt(sc.nextLine());
        for(int i = 0; i < days; i++) {
            d *= ((100 + sc.nextInt()) / 100d);
        }
        int delta = (int)d - money;
        System.out.println(delta);
        if(delta < 0) {
            System.out.println("bad");
        } else if(delta > 0){
            System.out.println("good");
        } else {
            System.out.println("same");
        }
        sc.close();
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

c입니다

#include <stdio.h>
double fluctuation(double money, double range)
{
    double final = money + (money * range / 100);
    return final;
}

int main(void)
{
    double a = 0, b = 0, aa = 0;
    int i = 0;
    int range[10];

    scanf_s("%lf", &a);
    while (!(100 <= a <= 10000))
        scanf_s("%lf", &a);
    aa = a;
    scanf_s("%lf", &b);
    while (!(1 <= b <= 10))
        scanf_s("%lf", &b);

    for (i = 0; i < b; i++)
    {
        scanf_s("%d", &range[i]);
        aa = fluctuation(aa, range[i]);
    }
    printf("%.0f\n", aa-a);

    if ((aa-a)==0)
        printf("same");
    else if ((aa-a) < 0)
        printf("bad");
    else
        printf("good");
    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int invsize;
    printf("Please insert how much you would like to invest.\n: ");
    scanf("%d", &invsize);
    if (invsize < 100 || invsize > 10000)
    {
        printf("That is not proper size to initiate your investment on stock.\n You had better to abandon it.");
    }

    int howlong;
    printf("Please insert how long you would like to invest.\n: ");
    scanf("%d", &howlong);
    if (howlong < 1 || howlong > 10)
    {
        printf("That is not proper period to initiate your investment on stock.\n You had better to abandon it.");
    }

    int fluct[howlong];
    float multiple[howlong];
    int cnt;
    for(cnt = 0; cnt < howlong; cnt++)
    {
        printf("Please insert the fluctuation ratio of the day %d in terms of percent.\n: ", cnt+1);
        scanf("%d", &fluct[cnt]);
        if (fluct[cnt] < -100 || fluct[cnt] > 100)
        {
            printf("That is not proper daily fluctuation ratio. Get Lost.");
            exit(1);
        }
        fluct[cnt] = fluct[cnt] + 100;
        multiple[cnt] = fluct[cnt] * 0.01;
    }
    float finmult = 1.0000;
    int cnt2;
    for (cnt2 = 0; cnt2 < howlong; cnt2++)
    {
        finmult = finmult * multiple[cnt2];
    }

    printf("\n\nThe result is: %.1f \n", (invsize*finmult - invsize));
    if((invsize*finmult - invsize) > -0.5 && (invsize*finmult - invsize) < 0.5)
    {
        printf("\nThe final Evaluation: Same!");
    }
    else if((invsize*finmult - invsize) >= 0.5)
    {
        printf("\nThe final Evaluation: Good!");
    }
    else
    {
        printf("\nThe final Evaluation: Bad!");
    }


    return 0;
}

C로 작성하였습니다. 굳이 구조화하지는 않았습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

stock.text 내용은 위에 인풋 내용 그대로입니다.

10000 4 10 -10 5 -5

f1 = open("stock,text")

a = int(f1.readline()
b = f1.readline()
s = f1.readline()

an = a

for c in s.split() :
  an = int ( an + an * int(c) / 100 )

print an -a
print ( ( an-a > 0.5 ) and "good" or ( (an-a < -0.5) and "bad" or "same" ) )
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

for x 2
연관 문제

언어별 풀이 현황
전 체 x 23
java x 3
cpp x 4
python x 13
기 타 x 1
ruby x 1
cs x 1