최근 풀었던 기출문제 시리즈를 이어서 풀어보다저번에 풀었던 7번 문제와 비슷한 유형이라 다시 한 번 글을 올리게 되었다. 저번 문제도 비슷하게 기존에 정의된 함수가 있고정답을 리턴하는 함수에서 어떻게 호출할 지를 정했었다. 문제주어진 배열에서 On이면 승차 Off이면 하차임을 의미한다. 그리고 곧장 풀이로 넘어가서 설명을 같이해보겠다. 풀이먼저 num_passenger 변수에는 승하차로 인해 총 몇 명이 타고 있는지를 저장해야 한다. 여기서 사용할 수 있는 함수에는 func1,2,3,4가 있다. 여기서 3번은 하차하는 인원을 세는 함수, 4번은 승차하는 인원을 세는 함수이다. 그렇게 계산이 끝난 num_passenger 변수와기존 파라미터로 주어진 seat 수를 사용해 남은 좌석 수를 리턴하게 된다. 이..
오랜만에 프로그래머스를 들어가보니 PCCE 기출문제가 추가되어 있었다. 그래서 순서대로 풀다 보니 블로그에 적어두어도 재밌을 것 같은 문제를 발견했다. 문제문제는 주어진 수를 2자리씩 끊어서 합치면 되는 문제였는데, 이 문제는 이미 작성된 코드 중 1줄만 수정하면 되는 문제이다. 풀이내가 변경한 것은 for문의 반복 횟수이다. 주어진 코드에서는 i 그런데 난 왜 굳이 5를 썼을까? 문제에서 주어지는 입력값의 제한사항이 2000000000까지이므로우리가 자릿수를 판별하기 위해 반복문 안에서 number /= 100을 통해 확인하는 최대 횟수는 5번이다. 따라서 i불필요한 반복문 실행을 할 필요는 없으니 문제에서 주어진 제한사항에 맞춰 풀었다고 보면 되겠다. 실행 결과
사실 이 문제는 회사에 들어와 가장 먼저 고민했던 문제였다. 로그인 시, 아이디와 패스워드를 암호화해 전송해야 했기 때문이다. 전에 Google Play Console 여기저기를 누르다보니 SHA 방식의 암호화를 지나치듯 본 기억이 있었다. 짧은 AES 방식 소개하지만 SHA는 복호화할 수 없는 방식이기에 AES 방식을 사용하기로 했다. AES 암호화 방식은 key 값의 길이에 따라 바뀌는데 16바이트이면 AES-128, 32바이트이면 AES-256이 된다. 대신 IV(Initialization Vector)의 길이는 AES-128, AES-256 둘 모두 16바이트로 동일하다. Random IV를 적용해보기여기서 재밌는 기능을 하나 추가해보자. 바로 IV를 매번 random하게 생성하는 것이다. 그리고..
이번 문제를 기점으로 0레벨의 PCCE 기출문제 시리즈는 1문제가 남았다. (이래 놓고 언젠가 추가될 수도 있지만) 이번 문제는 함수 이름때문에 스크롤을 이리저리 올렸다 내렸다 하는게 귀찮은 문제였다. 문제 이번 문제는 빈칸 채우기 문제로 설명을 읽기 전에 코드를 먼저 살펴보긴 했다. 코드를 먼저 봤을 때, 함수 내부를 완성하고 main 함수에서 해당 함수들을 적절히 호출하는 문제였다. 풀이 auto, target, minimum에 해당하는 함수를 작성해야 하는데 문제에서는 이름이 func1, 2, 3으로 구분되어 있다. 일단 func2가 auto 모드인 것은 해당 모드 동작과 함수 본문이 같은 로직이므로 직관적으로 파악할 수 있다. 이 때, 빈 칸에 else가 아닌 else if를 적으면 컴파일 에러가..
이 문제는 내 블로그에 꾸준히 등장하는 패턴이다. 문자형을 정수형으로 변환하는 게 핵심인데, 코틀린으로 벌써 이 유형을 4번째 풀고 있다. 하지만, 귀신같이 오늘도 헷갈려서 내 블로그를 뒤적였다. 문제를 다같이 보자. 문제 반복문으로 문자열 각 인덱스를 정수형으로 변환해 모두 더하면 끝이다. 풀이 다시 한 번 나에게 상기시키는 메소드지만, Character를 Int로 바꿀 때는 웬만한 상황에서 digitToInt()를 사용하면 된다. 웬만한 상황이라 적은 이유는 코틀린 버전이 낮은 상황(1.5 아래)에선 Character.getNumericValue를 사용해야하기 때문이다. 실행 결과
오랜만에 돌아온 PCCE 기출문제 시리즈이다. 이 사이에 있던 문제는 딱히 블로그에 올릴 만한 내용은 없어서 스킵해버렸다. 문제 실행 순서대로 설명해보면 n번 학생이 본인 점수를 질의한다. 그럼 해당 번호에 맞는 점수 두 개를 비교해서 같다, 다르다를 판단한다. 이렇게 정리해볼 수 있겠다. 풀이 원래는 score_list[i]와 같은지 판단하도록 코드가 구성되어있었다. 하지만, i번째를 비교하게 되면 입출력 예시에 대입해볼 때 값이 이상해진다. 학생의 번호 값이 들어있는 numbers 안의 값을 가져와야 하는데 score_list의 0번부터 비교하게 되면 안된다. 그래서 numbers[i] 값을 가져오게 되었는데 이 때, 입출력 예시에서 numbers 값이 1인 경우, our_score에서 비교하는 값이..
이번에는 피타고라스의 정리에 관한 문제인데 다들 아는 a제곱 + b제곱 = c제곱 공식을 알고 있는 지에 대해 확인하는 문제같다. 문제 결국 문제에서 요구하는 값은 b제곱인데 이는 보통 c제곱 - a제곱이라는 사실을 알 것이다. 풀이 여기서 이 문제가 특이했던 점은 2줄 이상 수정 시 에러가 난다고 한다. 그래서 한 줄만 수정했더니 저렇게 초록색으로 괜찮다는 표시가 보였다. 내가 수정한 줄의 원본은 int b_square = c - a;였다. 실행 결과
이 문제를 보고 PCCE가 뭔가 했더니 프로그래머스의 코딩필수역량인증시험이라고 한다. 그래서 기출문제를 하나씩 풀어보고 있다. 다만, 자주 사용하던 코틀린은 없다는게 아쉬울 따름이다. 문제 간단히 말해 주어지는 코드의 빈칸 넣기 문제이다. 풀이 아래 3줄의 프린트문에 맞춰 변수 값을 채워주었다. 정말 언어를 알고 있느냐 수준의 문제였다.
오늘은 회사에서 마주한 에러를 해결했던 에피소드를 적어보고자 한다. 사실, 되게 사소하지만 크리티컬한 문제였다. 가장 먼저 오늘 마주한 에러를 다시 재현하기 위해 내 노트북에서 샘플앱을 만들었다 ㅋㅋㅋㅋㅋ 마주한 에러 로그를 첨부하겠다. java.lang.RuntimeException: Can't create handler inside thread Thread[Timer-0,5,main] that has not called Looper.prepare() at android.os.Handler.(Handler.java:227) at android.os.Handler.(Handler.java:129) at android.app.Dialog.(Dialog.java:138) at android.app.Dialo..
오늘은 자바에서 가장 중요한 것들 중 하나인 상속에 대해 적어보려 한다. 먼저 상속이 뭘까? 상속은 다른 클래스의 설계도를 가져와 새로운 기능을 추가하는 기법이라고 할 수 있겠다. 이 상속 관계에 대한 호칭은 언어마다 다른데 주로 사용되는 호칭을 몇 개 나열해보면 상위 - 하위 부모 - 자식 슈퍼 - 서브 정도가 있겠다. 자바에서 공식적으로 사용하는 호칭은 슈퍼 - 서브인데 개발자들은 부모 - 자식으로도 많이 얘기한다고 들었다. 상속받은 클래스(자식)의 객체를 만들면 자동으로 상속해준 클래스(부모)의 객체도 내부에 같이 생성된다. 이러다 보니 내가 상속받아온 클래스의 멤버를 마음대로 사용 가능하다. 하지만, 저번 글에서도 소개했듯이 객체지향 프로그래밍에서는 멤버 변수를 직접 .연산자를 통해 제어하는 것을..