2024-04-24

이재형·2024년 4월 24일
0

코팅 테스트 정리

프로그래머스 (원소들의 곱과 합)

정수가 담긴 리스트 num_list가 주어질 때,
모든 원소들의 곱이 모든 원소들의 합의 제곱보다
작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

public int solution(int[] num_list)
{
    int num1 = 1; // 모든 원소의 곱
    int num2 = 0; // 합의 제곱
    for (int i = 0; i < num_list.Length; i++)
    {
        num1 *= num_list[i];
        num2 += num_list[i];
    }
    num2 = num2 * num2;
    int answer = num1 > num2 ? 0 : 1;
    return answer;
}
  1. 곱은 0으로 하면 안되므로 1 , 합의 제곱은 더 한 후 하기 때문에 0으로 저장
  2. 같은 리스트의 값으로 변경하기 때문에 for문으로 리스트의 길이만큼 반복함
  3. 반복하여 순서를 각 변수로 더하거나 더함
  4. 합의 제곱인 num2는 반복문이 끝나고 제곱하여 저장함
  5. 둘 중에 더 큰 변수를 삼향 연산자로 하여 값으로 반환함

프로그래머스 (피자 나눠 먹기(1))

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다.
피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이
피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는
solution 함수를 완성해보세요.

public int solution(int n)
{
	int answer = n % 7 > 0 ? 1 + n / 7 : n / 7;
	return answer;
}
  1. 삼향연산자로 피자를 7조각이 기준으로 하고 사람 인원수를 n으로 함
  2. 사람수를 조각 수 인 7로 나눔
  3. 나머지가 1 이상이면 1조각을 더함

프로그래머스 (외계행성의 나이)

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에
불시착하게 됐습니다.입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962
행성에서는 나이를 알파벳으로 말하고 있습니다.
a는 0, b는 1, c는 2, ..., j는 9입니다.예를 들어
23살은 cd, 51살은 fb로 표현합니다.나이 age가 매개변수로 주어질 때
PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

public string solution(int age)
{
	string answer = "";
	string[] a = new string[10] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
	if (age < 10)
	{
		answer += a[age % 10];
	}
	else if (age < 99)
	{
		answer += a[(age / 10) % 10];
		answer += a[age % 10];
	}
    else
  	{
    	answer += a[age / 100];
    	answer += a[(age / 10) % 10];
    	answer += a[age % 10];
	}
	return answer;
}

스파르타 구현 내용(Main은 맨 마지막)

1. 던전

static void Dungeon()
{
    Console.WriteLine("-----------------------------------------\n");
    Console.WriteLine("던전입장");
    Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.");
    Console.WriteLine("1. 쉬운 던전   | 방어력 5 이상 권장");
    Console.WriteLine("2. 일반 던전   | 방어력 11 이상 권장");
    Console.WriteLine("3. 어려운 던전 | 방어력 17 이상 권장");
    Console.WriteLine("0. 나가기\n");
    Console.Write("원하시는 행동을 입력해주세요:");
    Console.Write(">> ");
    string str = Console.ReadLine();
    switch (str)
    {
        case "0":
            // 나가기
            break;
        case "1":
            DungeonStart(1);
            break;
        case "2":
            DungeonStart(2);
            break;
        case "3":
            DungeonStart(3);
            break;
        default:
            Console.WriteLine("잘못된 선택지 입니다. 다시 입력해주세요!");
            Dungeon();
            break;
    }
}

static void DungeonStart(int level)
{
    if (level == 1)
    {

    }
    else if (level == 2) 
    {
        
    }
    else // level = 3
    {
        
    }
}
  1. string형 str에 readLine()으로 값을 저장
  2. 0은 선택지로 1~3은 던전실행 메서드에 매개변수를 넣음
  3. 아직 미완이지만 아래에 해당 매개변수에 따라서 방어력 및 공격력 수치로 보상 변경 예정

2. 휴식

static void Rest()
{
    Console.WriteLine("-----------------------------------------\n");
    Console.WriteLine("휴식하기");
    Console.WriteLine($"500 G를 내면 체력을 회복할 수 있습니다. (보유 골드 : {playerInfo.gold} G\n");
    Console.WriteLine("1. 휴식하기");
    Console.WriteLine("0. 나가기\n");
    Console.Write("원하시는 행동을 입력해주세요:");
    Console.Write(">> ");
    string str = Console.ReadLine();
    switch (str)
    {
        case "0":
            // 나가기
            break;
        case "1":
            if (playerInfo.gold >= 500)
            {
                Console.WriteLine("휴식을 완료했습니다.");
                playerInfo.gold -= 500;
                playerInfo.hp = 100;
            }
            else
            {
                Console.WriteLine("Gold가 부족합니다.");
                Rest();
            }
            break;
        default:
            Console.WriteLine("잘못된 선택지 입니다. 다시 입력해주세요!");
            Rest();
            break;
    }
    Console.WriteLine();
}
  1. 똑같이 ReadLine()으로 문자열을 받는다.
  2. switch문으로 값에 따라서 실행하고 1번을 선택하면 골드 조건에 맞는지 확인
  3. 만약 조건에 맞으면 골드 감소 및 체력을 증가시킨다.
  4. 조건에 맞지 않다면 Gold가 부족하다는 텍스트와 함께 재귀함수로 메서드 재실행

3. 선택지 갱신

// 선택지(계속 실행)
static void Select(Info playerInfo, equipment[] equipments)
{
    Console.WriteLine("-----------------------------------------");
    Console.WriteLine("1. 상태 보기");
    Console.WriteLine("2. 인벤토리");
    Console.WriteLine("3. 상점");
    Console.WriteLine("4. 던전입장");
    Console.WriteLine("5. 휴식하기");
    Console.Write("\n원하시는 행동을 입력해주세요:");
    Console.Write(">> ");
    string str = Console.ReadLine();
    Console.WriteLine("-----------------------------------------\n");
    switch (str)
    {
        case "1":
            playerInfo.InfoShow();
            break;
        case "2":
            Inventory();
            break;
        case "3":
            Shop(equipments);
            break;
        case "4":
            Dungeon();
            break;
        case "5":
            Rest();
            break;
        default:
            Console.WriteLine("잘못된 선택지 입니다. 다시 입력해주세요!");
            Select(playerInfo, equipments);
            break;
    }
}
  1. 던전입장, 휴식하기를 추가함

4. 장비에 따른 플레이어 스탯 증가

struct Info
{
    public int level = 1;   // 레벨
    public string name; // 직업
    public int str;     // 공격력
    public int def;     // 방어력
    public int hp;      // 체력
    public int gold;    // 골드
    public int currentNum = 0; // 현재 장비 개수

    public equipment weapon = new equipment();
    public equipment armor = new equipment();

    // 구조체 생성 시 기본 정보 등록
    public Info()
    {
        level = 1;
        name = "이름없는 모험가";
        str = 10;
        def = 5;
        hp = 100;
        gold = 1500;
    }

    public void InfoShow()
    {
        Console.WriteLine("-------------------------------");
        Console.WriteLine("상태 보기");
        Console.WriteLine("캐릭터의 정보가 표시됩니다.");
        Console.WriteLine($"LV. {level}");
        Console.WriteLine($"이름: {name} ( 전사 )");
        Console.WriteLine($"공격력: {str} + {weapon.vaule}");
        Console.WriteLine($"방어력: {def} + {armor.vaule}");
        Console.WriteLine($"체  력: {hp}");
        Console.WriteLine($"Gold: {gold}G");
        Console.WriteLine("-------------------------------\n");

        Console.WriteLine("0. 나가기");
        Console.WriteLine("\n원하시는 행동을 입력해주세요. ");
        Console.Write(">> ");
        string text = Console.ReadLine();
        if(text != "0")
        {
            Console.WriteLine("잘못된 입력입니다.\n");
            InfoShow();
        }
    }
}
  1. 플레이어의 전용 장비를 구조체로 생성
  2. 생성한 장비를 착용했을 때 장비에 따라서 공격력과 방어력에 수치 증가 부여

정리

진행 사항(스파르타 던전 Text게임)

1. 휴식 기능 완전 구현

2. 던전 기능 난이도까지 구현

3. 장비에 따른 플레이어 공격력, 방어력 증가

해결 못한 문제

1. 스파르타 Text게임의 추가 요구사항

문제점

1. 코드 로직 복잡하여 오류 발생시 찾기 힘듬 (분할 하던지 줄여야함)

profile
한국사람

0개의 댓글