728x90

전체 글 119

kotlin 프로그래머스 lv2 피로도

해당 문제를 풀때, 완전탐색이라고 적혀져있어서 먼저 완전탐색이 뭔지 확인 후 문제를 읽었다. 완전탐색은 말그대로 모든 경우를 탐색하는것이다. dungeons배열이 [[80,20],[50,40],[30,10]] 이렇게 주어질때 탐색할 수 있는 모든 경우가 예를들어 dungeons 배열의 1->2->3 순서대로 탐색할 수도있지만 1->3->2 순서대로 탐색할 수도있다. 그래서나는 현재 인덱스부터 시작해서 마지막 던전까지 모든 순서를 변경해서 모든 순열을 확인해보도록 했다. 먼저 solution 함수안에서 모든 내용을 다 적어내기보단 함수를 따로 만들었다. exploreDungeons 함수는 파라미터로 k:피로도 dungeons:소모피로도배열 index: 현재 dungeons배열에서 몇 행인지 를 나타낸다. ..

kotlin 프로그래머스 lv2 프로세스

문제를볼때마다 느끼는것이 있는데, 자료 구조나 스택문제는 계속해서 나오는것 같다. 1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다. 2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 먼저 나는 LinkedList를 이용해서 que라는 리스트를 초기화했다. 그 이유는 LinkedList가 특히 목록의 시작이나 끝에서 효율적인 삽입 및 삭제 작업으로 인해 대기열을 구현하는 데에 적합하기 때문이다. LinkedList에는 각각의 요소가 Pair로 이루어져 있으며, 첫 번째 요소는 우선순위..

kotlin 프로그래머스 lv2 기능개발

1. 의도 및 이유: 배포시 개발속도별로 모두 다르고, 뒤의 기능이 앞의 기능보다 먼저 개발될 수 있어서, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포되므로 새로운 배포배열 왼쪽요소의 값이 오른쪽 요소 값보다 크다면 오른쪽 요소의 값을 왼쪽요소의 값으로 바꿨다. 2. 코드 동작 로직: -먼저 작업진도 배열의 값들은 현재 진도 상태를 나타내고 우리가 구하기위한값은 나머지완성 배포일이 얼만큼 걸리는지 구해야하기 때문에 전체 100-progresses요소 를 뺀 새로운 배열을 만들어주었다. ex)newProgresses = [7, 70, 45] -그 후 배포일 배열을 새로 초기화하고 newProgresses의 요소를 작업속도 요소로 나눈값이 나누어떨어지지 않는다면 몫에 1을 더했다. -마지막..

kiosk 과제 lv4-인터페이스 구현

kiosk 과제 lv3까지는 주문시 메뉴선택기능만 있었는데 lv4부터는 주문시 가격차감 및 잔액 표시 기능까지 추가하였다. lv3까지와 마찬가지로 클래스별로 기능을 나눴다. 먼저 작성한 파일은 Food.kt 파일이고, 인터페이스(바디가 없는 메서드들의 모음)로 구현했다. package com.ellycrab.kiosklv4 interface Food { //대분류 메뉴 val categoryName:String //소분류 메뉴 val foodOptions:List fun displayOptions() fun orderItem(choice:Int):Pair? } Sandwiches Wraps Salads 클래스에서는 Food클래스를 상속 받는다. package com.ellycrab.kiosklv4 cla..

과제/키오스크 2024.03.13

kotlin 프로그래머스 lv2 할인 행사

해당 문제를 읽고 다음과 같은 알고리즘 사고를 해보았다. 1. want배열과 number배열을 맵으로 만들어 연결시키기 2. discount 배열에서 10일씩 이동하면서 want배열의 물건의 수량과 같은지 비교하는 작업하기 코드는 아래와 같이 작성하였다. 먼저 val wantMap = mutableMapOf() for (i in want.indices) { wantMap[want[i]] = number[i] } 다음 코드를 작성해서 wantMap을 만들어주었다. 그 후 배열을 10개단위로 잘라나가는 반복을 하기위해 예를들어 배열의 길이가109라면 10개를 잘라나간다고 가정했을때, 마지막 인덱스에서 9를 빼야 i는 100부터 시작해서 109에 마무리할수있어서 for (i in 0 until discount..

kiosk lv3-추상클래스 구현

kiosk lv2에서는 추상클래스를 구현하지 않았다. 그래서 lv3에서는 추상클래스 Food를 나머지 (Salads, Sandwiches , Wraps) 클래스에서 상속을 받을 수 있도록 설계했다. 먼저 Food.kt을 작성했고, 코드는 아래와 같이 작성했다. package com.ellycrab.kiosklv3 open class Food(val foodOptions:List,val foodCategory: String) { //대분류 fun displayOptions(){ println("$foodCategory 카테고리 선택:") foodOptions.forEachIndexed { index, value -> println("${index+1}.$value") } } //세부메뉴 open fun o..

과제/키오스크 2024.03.12

Calculator lv5 stack클래스 이용

Calculator lv5 실습은 우선순위를 고려한 프로그래밍을 작성하는 것이다. 괄호가 있다면 안에있는 괄호가 먼저 계산되어야하고 만약 * / 연산자가 있다면 해당 연산자가 + 나 - 보다 먼저 계산되어야한다는 조건이다. 해당 실습을 위해서 Stack이라는 클래스를 활용해야한다고 한다. Stack이란 개념은 아직 알고리즘에 익숙하지 않아서 여러 블로그글을 보다가 우연히 아래의 블로그에서 이미지가 잘 설명되어서 참고하였다. https://mailmail.tistory.com/26 [자료구조] 스택(배열 이용) - push, pop 안녕하세요. PEACE-입니다.자료구조 스터디 [세 번째] 글입니다. 1. 스택 스택이란 자료구조 중 하나입니다. 가장 최근에 들어간 데이터가 가장 먼저 나오며 흔히 후입선출(..

과제/계산기 2024.03.12

kotlin 프로그래머스 lv2 행렬의 곱셈

해당 문제는 행렬의 곱셈을 반환하는 문제이다. 행렬A(a*b) 행렬B(c*d) 두 행렬을 곱하면 a*d 크기의 행렬이 완성된다. (a:행 b:열 c:행 d:열) 이때 b열과 c행의 크기가 같아야하며, 다르면 계산할수 없다. 문제에서는 arr1행렬과 arr2행렬이 주어진다. 나는 먼저 arr1행렬의 행과열을 구하면 arr2의 행과 열은 일단, arr2의 행은 arr1행렬의 열과 크기가 같다. 그래서 간단히 arr1의 행과 열 그리고 arr2의 열을 변수에 담기로 결정했다. 그리고 arr1의 열과 arr2의 행의 크기가 같지 않다면 예외처리를 했다. 마지막으로 새로운 행렬을 담기위한 배열을 초기화해줬다. 그 후 for문을 이용해서 result 배열을 채워줬다. 1. 의도 및 이유: 행렬 곱셈은 각 원소를 적..

kiosk 과제 lv2

이번에는 kiosk 과제 lv2를 진행하였다. - 필요한 클래스들을 설계합니다.(버거, 아이스크림, 음료, 맥주, 주문, 공통 등) - 클래스들의 `**프로퍼티**`와 `**메소드**`를 정의합니다 - 예를 들어 아래 이미지처럼 클래스 다이어그램을 그려봅시다. - 햄버거는 이름, 가격 같은 프로퍼티와 정보를 출력하는 메소드가 있을 수 있죠? - **`Lv1`**에서 작성한 로직을 메소드로 만듭니다. 나는 기존과 동일하게 서브웨이 메뉴로 진행했다. 각각의 메뉴별 클래스를 따로 만들고 각 메뉴별로 프로퍼티와 메서드를 따로따로 적었다. package com.ellycrab.kiosklv2 class SandWiches { //샌드위치 프로퍼티 val sandwichOptions = listOf("Egg Sli..

과제/키오스크 2024.03.11

kiosk 과제 lv0,1

스파르타 코딩클럽에서 키오스크과제가 주어져서 진행했다. 나는 서브웨이 메뉴로 키오스크를 만들었다. LV0 과제 시작전 어떻게 구현할것인지 그려 보는 과정 -요구사항별 상세 기능정의 -사용하면서 발생할 수 있는 예외 사항 고려 -0누르면 종료 [ 필요한 기능 ] 요구사항1: 메인 메뉴판 화면 : 메뉴 선택시 상세 메뉴화면으로 이동 : 잘못된 번호 선택 시 예외처리 : 프로그램 종료을 위한 번호 정의 요구사항2: ~~~ 요구사항3: ~~~ 요구사항4: ~~~ package com.ellycrab.kiosklv0 import java.lang.Exception //키오스크 lv0 /* 과제 시작전 어떻게 구현할것인지 그려 보는 과정 -요구사항별 상세 기능정의 -사용하면서 발생할 수 있는 예외 사항 고려 -0누..

과제/키오스크 2024.03.11
728x90