코딩 테스트 문제/프로그래머스 16

x만큼 간격이 있는 n개의 숫자

문제 이 프로그램은 간격 x와 숫자의 개수 n개를 입력 받아, x부터 시작하여 x 간격으로 n개의 숫자를 출력한다. 예를 들어 x와 n이 각각 2와 5라면, 2,4,6,8,10을 출력하는 것이다. x와 n을 입력 받으면, solution함수 내에서 반복문을 n 만큼 돌린다.(n개의 숫자를 출력해야 하기 때문이다.) 그리고 반복문 속 배열 answer에 i와 x를 곱하고, x를 더한 값을 차례대로 저장한다.(x만큼 간격의 숫자를 출력해야 하기 때문이다. 그리고 x를 더해 주는 것은 i가 0부터 시작하기 때문에, 배열 첫 번째 방에(0*x=)0이 들어가기 때문이다.) 마지막으로 x부터 x간격 만큼의 n개의 숫자가 저장된 answer를 반환한다. 실행 결과 1: x가 4, n이 3에 대한 입력의 실행 결과이다..

제일 작은 수 제거하기

문제 이 프로그램은 정수형 배열 arr에 숫자를 입력 받고, 그 중 가장 작은 수 하나를 제거하고 arr를 반환하는 프로그램이다. 단, 반환하려는 배열이 빈 배열인 경우(원소가 하나 뿐이라서 가장 작은 수를 제거하면 배열이 비어버리는 경우)에는 -1을 반환한다. 먼저 배열의 길이를 if문으로 측정해, 배열의 원소가 1개 뿐이면 (가장 작은 수 하나가 제거된 후)반환 될 배열이 비어 버리므로 -1을 반환 되도록 한다. 배열의 길이가 1 이상이면, min이라는 변수에 배열의 첫 번째 원소를 저장한 뒤, 나머지 원소와 비교를 하며 배열에서 가장 작은 수를 저장한다. 더불어 index를 두어, 가장 작은 수의 위치를 파악한다. 그 후 리스트 answer에 arr를 그대로 복사해 넣고 가장 작은 수의 인덱스를 통..

하샤드 수

문제 이번 프로그램은 입력 받은 양의 정수가 하샤드 수인지 아닌 지를 판별해, 맞으면 true를 아니면 false를 출력하는 것이다. 하샤드 수는 어떤 수 x의 각 자릿수 숫자들의 합으로 x를 나눌 수 있는 수를 말한다. 위 문제의 예를 들어, 입력된 수가 18이면 각 자릿수의 합은 (1+8=)9이다. 18은 9로 나눌 수 있기 때문에 하샤드 수의 조건을 만족한다. 입력 받은 수 x는 문자열로 변환한다. 그리고 정수형 배열 arr_x에 문자열을 하나씩 떼어 정수형으로 변환해 집어 넣는다. 그리고 각 자릿수의 값이 저장된 arr_x를 이용해 각 자릿수의 합을 구한다. if문을 통해 입력된 x가 하샤드 수의 조건을 만족하지 못하면, true로 초기화 되어있던 answer를 false로 바꾸어 반환한다. 실행..

콜라츠 추측

문제 이 프로그램은 어떤 숫자를 일련의 작업을 통해 1로 만드는 데에 걸리는 횟수를 결과로 보인다. 일련의 작업이란, 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한다. 이 두 작업을 입력된 수가 1 이 될 때 까지 반복하고, 작업을 반복한 횟수를 반환한다. 단, 작업을 반복한 횟수가 500번을 넘어간다면, -1을 반환한다. 실행 결과 1: 16을 입력했을 때의 실행 결과이다. 실행 결과 2: 626331을 입력했을 때의 실행 결과 이다. 이 입력은 문제가 있었다. 입출력 예제에서는 626332를 입력하라고 했는데, 출력은 500에 한참 미치지 못하는 110이 나왔다. 그래서 뭔가 잘못되었구나-하고 코드를 열심히 살펴봤다. 그러다가 입출력 예 설명 부분을 봤더니, 입력 626331에 대한 설명이 ..

서울에서 김서방 찾기

문제 이 프로그램은 문자열 배열 seoul에 이름(들)을 받는다. 그 중 "Kim"의 배열의 위치을 찾아, "김서방은 (Kim이 있는 배열의 위치)에 있다."라는 출력을 보여준다. 그래서 for문을 통해 배열 seoul의 값 중 "Kim"과 같은 문자열을 찾은 후, 그 인덱스인 i를 사용하게 된다. 실행 결과 : 위 메인에 대한 실행 결과이다. 이번 문제는 제목이 재미있어 보였다. 그리고 문제도 재미있었다. 스토리를 조금 첨가해서 이렇게 유쾌한 문제도 만들 수 있구나 하는 생각이 들었다. 그냥 배열에서 어떤 문자열을 찾아 위치를 반환해라-라는 문제였다면 흥미도 동하지 않았을 뿐더러, 재미도 없었을 것이다. 그런데 '서울에서 김서방 찾기'라는 적절한 포장이 들어가자, 웃기기도 하고 재치 있게 느껴져서 즐겁..

이상한 문자 만들기

문제 프로그램은 공백을 기준으로 짝수 번째 문자를 대문자로, 홀수 번째 문자를 소문자로 바꾼다. 먼저 메인에서 문자열을 입력 받는다. 문자열의 짝수/홀수 번째 수를 판별하기 위한 카운트 변수를 선언 및 초기화 한 이후의 for문에서 공백을 만나면, 카운트를 0으로 초기화 한다. 공백을 만나지 않으면, 짝수 번째 인지 홀수 번째 인지 카운트 변수를 통해 if/else로 구분한다. 그리고 짝수 번째의 문자는 대문자로 바꾸어 스트링 버퍼에 추가하고, 홀수 번째 문자는 소문자로 변환해 추가한다. 그리고 카운트를 증가 시켜 다음 문자의 번째 수를 저장한다. for문이 종료 되면, answer에 이어 붙인 문자들을 담아 반환한다. 실행 결과 : 위 메인에 대한 실행 결과이다. 대소문자로 변환하라는 문제를 읽고 to..

완주하지 못한 선수

문제 프로그램은 participant와 completion라는 배열로, 각각 참가자와 완주자들의 이름을 받아 참가자 명단에는 있지만, 완주자 명단에는 없는 이름을 리턴 하는 논리로 작동 된다. 우선 participant와 completion을 메인에서 받아서, 위 문제의 제한 사항에 따른 예외 처리를 한다. 그 후 참가자 명단과 완주자 명단을 정렬한다. 그래서 for문을 통해 참가자 명단과 완주자 명단을 비교하는데, 완주자 명단이 참가자 명단보다 길이가 1개 짧기 때문에, if문에서 (완주하지 못한 선수 때문에) 걸릴 것이다. 그러면 차이가 나는 참가자의 i번째 사람 이름을 answer에 채워준다. 그러나 for문이 완주자 명단의 길이 만큼 돌기 때문에, for문에서 if문에 걸리지 않는 경우는, 참가자..

정수 제곱근 판별

문제 먼저 어떤 정수 n값을 solution()을 통해 받는다. 그 후 n의 제곱근과 정수형으로 변환한 n의 제곱근의 몫이 1과 같은 지 확인한다. 만약 n의 제곱근(이후 x라고 하겠음.)이 정수형이면, x/정수형으로 변환한 x의 몫은 1이 될 것이다. 그러나 x가 실수형이면, x/정수형으로 변환한 x의 몫은 1.x.....로 1이상의 실수형이 될 것이다. 이렇게 어떤 n값이 어떤 정수 x의 제곱인지 아닌지 판단한다. 그 후, x가 정수라면 문제의 지시에 따라 (x+1의 제곱)을 리턴 한다. x가 정수가 아니라면(=n값이 어떤 정수 x의 제곱이 아니라면) -1을 리턴 한다. 아래는 11의 제곱인 121을 입력했을 때, (11+1)의 제곱인 144를 반환한 실행 결과이다. 실행 결과 : 아래는 3을 입력했..