이번 문제는 0레벨에 있는 문제 시리즈 중 하나인데 최근 푼 문제 중에 가장 재밌었다. 문제 가장 먼저 7조각의 피자를 인원 수에 딱 맞게 시킬 경우와 그렇지 않은 경우를 판단해야 했다. 7의 배수라면 7*X와 같이 총 조각 수가 나오게 될 것이고, 피자는 X판을 주문하면 됐다. 나머지 경우는 한 판을 여유롭게 시켜야 했다. 그런데 이렇게 생각할 경우 n이 7 미만일 때가 애매했다. 풀이 그래서 인원 수에 맞게 주문할 경우와 아닌 경우는 %연산자를 통해 7의 배수인지 확인했고, 나머지 경우에서 주문할 피자 수를 구할 때는 n을 7로 나눈 몫을 사용하면 n이 7 미만이어도 이미 +1을 해두었기 때문에 문제가 없었다.
오랜만에 코딩 문제를 풀어보려하니 생각보다 머리가 안 돌아간다. 그래서 다시 낮은 레벨부터 시작해보기로 했다. 문제 풀이 먼저 1부터 입력된 n까지 반복문을 통해 홀수를 찾는 것을 목표로 했다. 이 때, 반복문을 1부터 n번 반복할 필요는 없다고 생각했다. 홀수 찾기가 목표이기에 2씩 건너뛸 방법을 찾아보았다. 내가 찾은 방법은 for문에서 step을 사용해 해결할 수 있었다. 그 다음 찾은 홀수를 어떻게 배열에 담을까 고민하다 이전에 List를 Array로 만들어 리턴해 주기로 했다. List를 사용한 이유는 Array의 크기는 수정할 수 없고, for문 안에 사용된 i를 통해 간단히 Array의 index에 접근하기에는 무리가 있었다. 문제에서 Array를 오름차순으로 리턴하라고 했지만 for문을 1..
오늘은 레벨1에서 정답률이 높은 편에 있던 문제를 풀어보았다. 문제 이 문제는 문자열 길이만큼 반복문을 사용해 각 자리가 숫자인지 판별하고 숫자가 아니면 false를 숫자이면 true를 반환하면 되는 문제였다. 풀이 이 문제에서 반복문을 사용할 때 라벨을 사용해보았다. 주어진 s의 길이만큼 반복하며 숫자인지 확인하고 숫자가 아니라면 break를 사용해 반복문을 종료하기 위해 라벨을 loop라는 이름으로 지어줬다.
오늘은 오랜만에 문제를 풀어보게 되었는데 사실 이 문제를 풀면서 또 다시 공식 문서의 중요성을 깨닫게 되었다. 문제 사실 굉장히 간단한 문제라고 생각했다.(공식 문서의 중요성은 조금 뒤에 말해보겠다) 일반적인 경우, 전달된 배열을 리스트로 바꾸고 최솟값을 제거한 뒤 다시 배열로 만들어 리턴하면 되고, 배열의 길이가 1인 경우 곧바로 -1만 들어있는 배열을 만들어 리턴하면 된다. 풀이 최종 정답을 받은 풀이는 위 사진의 코드이다. 하지만, 이전 코드는 약간 달랐다. 차이점도 있었고, 에러가 났던 부분도 설명해보겠다. class Solution { fun solution(arr: IntArray): IntArray { var answer = intArrayOf() if (arr.size == 1) answe..
오늘 풀어본 문제는 보자마자 문자형을 바탕으로 해결하면 되겠다는 생각이 들었다. 문제 C언어를 배울 당시 아스키 코드에서 대문자는 65부터 90까지, 소문자는 97부터 122까지의 번호였다. 이와 유사하게 유니코드에서도 숫자는 약간 다르지만 대문자, 소문자끼리 연속된 번호를 사용 중이었다. 하지만, 위의 2줄은 사실 큰 의미가 없었다.. isUpperCase(), isLowerCase() 메소드로 문자 하나가 대문자인지 소문자인지 구별할 수 있기 때문이다. 풀이 리턴될 answer 변수에 주어진 s의 0번 인덱스부터 각 문자의 대소문자 여부를 검사하고 n만큼 민 문자를 더해주었다. 그리고, 만약 문자에 띄어쓰기가 나오면 answer 변수에도 똑같이 띄어쓰기를 더해주었다.
오늘은 정렬 기능을 사용해야하는 문제였다. 문제 이전 문제들을 풀때 사용했던 방식을 가져와 일단 n을 MutableList에 하나씩 각 자리의 수를 추가해주었다. 그렇게 완성된 MutableList를 내림차순으로 정렬하려고 찾아보았더니 먼저 sort() 메소드를 통해 오름차순으로 정렬하고 reverse() 메소드로 역순 정렬을 할 수 있었다. 이렇게 내림차순으로 완성한 MutableList를 비어있는 String 변수에 0번 인덱스부터 차례대로 추가해주었고 이를 Long타입으로 변환하여 리턴될 answer 변수에 대입해주었다. 풀이 println 주석은 만든 MutableList가 내림차순까지 정렬이 되었는지 보기 위해 작성해보았다.
오늘 해결한 문제는 전에 풀었던 문제 중 겪었던 에러를 또 한 번 겪게 되어 조심해야겠다...는 생각을 하게 해준 문제이다. 문제 먼저 x를 한자리씩 떼어 덧셈을 해야하므로 String형으로 변경한 후 그 길이만큼 반복하며 다른 변수에 자릿수 합을 저장했다. 이 때, 저번에 문제를 풀며 겪었던 문제를 다시 겪게 되었는데 정수형 변수에 자릿수 합을 저장하려 했지만 String으로 변경한 x 변수의 각 자리는 Char형이기 때문에 해당하는 유니코드 값이 저장되었다. 풀이 이 코드에서 문제가 되었던 부분이 바로 for문에서 실행된 문장이었다. tempSum이라는 변수에 자릿수 합을 저장해야 했는데 xToString[i].toInt()를 += 연산자를 통해 tempSum에 더해주면 숫자의 유니코드 값이 더해졌다..
이번에 풀어본 문제는 의식의 흐름대로 풀다보니 코드가 길어진 감이 없지 않아 있는데... 아직 줄여쓰는 것이 익숙치 않다. 문제 중첩된 for문과 그 안에서 조건문을 같이 사용하다보니 반복문과 조건문 또는 다른 실행문의 순서가 조금 헷갈리긴 했지만 천천히 '의식의 흐름'대로 되짚어 가며 풀었다. 풀이 가장 먼저 주어지는 두 정수 사이의 수만큼 반복하기 위해 left에서 right까지 반복하도록 조건을 설정했고 각각의 수마다 약수의 개수를 판단하기 위해 해당하는 수를 1부터 1씩 증가시키며 해당하는 수까지 나머지 연산을 통해 약 찾을 때마다 cnt 변수를 1씩 증가시켜 약수의 개수를 저장해두고 반복문이 끝나면 cnt 변수를 통해 약수의 개수가 짝수이면 리턴될 answer 변수에 더해주고 홀수이면 뺄셈을 해..
이번엔 오랜만에 문제를 풀어봤는데 상당히 간단한 문제였다. 그 동안 구글 플레이에 올렸던 앱 하나에 별점 1점을 받아 해당 문제를 해결하고 다른 고민거리를 생각하다 보니 며칠이 훌쩍 지나버렸다. 아무튼 다시 문제 풀이로 들어가보겠다. 풀이 먼저 price와 count를 이용해 지불해야할 총 금액을 계산했다. 그리고 지불해야할 금액과 가지고 있는 금액을 비교해 금액이 부족하면 부족한 금액을 리턴하고, 금액이 모자라지 않으면 0을 리턴하도록 코드를 짜보았다. 풀이 tempMoney 변수를 Long 타입으로 만든 이유는 리턴이 Long 타입인데 아래의 if-else 문에서 리턴될 answer 변수에 Int타입끼리 연산 후 대입하게 되면 Type mismatch 에러가 발생하기 때문이다.
먼저 최근에 프로그래머스 거의 문제 풀이글만 올리다 Kotlin에 대해 소개를 할까 생각이 들었다. 프로그래머스 문제를 해결하면서 필요한 메소드나 확장 함수 등을 사용하려고 할 때 나는 주로 코틀린 공식 홈페이지에서 Docs를 찾는 편인데 기본기가 모자라 가끔 알아볼 수 없는 것들이 몇 개 있기 때문이다. 위 제목은 내가 몇몇 회사를 지원하면서 직접 받은 질문 중 하나이기도 하다. 일단, 나는 안드로이드 직군을 희망하고 있는 상태이므로 안드로이드에서 코틀린을 사용할 때의 장점을 적어보려 한다. 시작해보겠다. 1. 가독성이 좋은 적은 코드 사용 이건... 딱히 설명이 구체적이지 않아 스킵... 2. 성숙한 언어와 환경(직역) 2011년에 만들어진 후, 코틀린은 언어뿐만 아니라 전체 생태계까지 지속적으로 개..