알고리즘 풀이 354

[Level1] 모의고사

문제 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 문제의 정답이 입력되었을 때 가장 많이 맞힌 수포자의 번호를 출력한다. 동점자가 있으면 오름차순으로 정렬하고 문제의 수는 최대 10000개이다. 입력 [1,2,3,4,5] 출력 [1] 1. 수포자들이..

[Level1] 완주하지 못한 선수

문제 마라톤에 참가한 선수 중 한 사람만 통과하지 못했다. 마라톤에 참가한 선수의 이름이 들어가있는 리스트와 완주한 선수들의 이름이 들어있는 리스트가 입력이 되었을 때 완주하지 못한 선수의 이름을 출력해보자. 마라톤에 참가한 선수 중 동명이인이 있을 수 있다. 입력 ["leo", "kiki", "eden"] ["eden", "kiki"] 출력 "leo" 1. 두 개의 리스트를 비교할 때 정렬을 한 뒤 비교를 해보자. 2. 입력된 두 개의 리스트를 오름차순으로 정렬한다. 3. completion을 기준으로 for문을 돌려 같은위치에 있는 이름을 비교한다. 4. 만약 같은 위치에 다른이름이 있다면 participant의 이름을 출력한다. 5. 위의 for문에서 return되지 않았다면 participant의..

[Level1] 같은 숫자는 싫어

문제 여러 개의 정수로 이루어진 리스트가 입력된다. 이 리스트의 수는 0이상 9이하로 존재한다. 이때 연속으로 존재하는 숫자는 한 개만 남기고 모두 제거하도록 한다. 입력 [1,1,3,3,0,1,1] 출력 [1,3,0,1] 1. 현재 인덱스와 다음 인덱스의 수가 같으면 continue를 하고 다르면 answer에 수를 추가한다. 2. 인덱스가 증가하다가 마지막 인덱스에 도달 했을 때 마지막 숫자를 answer에 추가한다. 3. answer에는 문제에서 요구하는 숫자만 남게된다. python def solution(arr): answer = [] for idx in range(len(arr)): if idx==len(arr)-1: answer.append(arr[idx]) continue if arr[id..

[Level1] 나누어 떨어지는 숫자배열

문제 정수로 이루어진 리스트와 정수가 입력되었을 때 리스트 중 입력된 정수로 나누어 떨어지는 수를 오름차순으로 정렬하여 출력한다. 만약 나누어 떨어지는 수가 없다면 -1을 포함시켜 출력한다. 입력 [5, 9, 7, 10] 5 [3, 2, 6] 10 출력 [5, 10] [-1] 1. 리스트를 탐색하여 divisor와 나누어 떨어지는 수를 answer에 추가한다. 2. 리스트 탐색이 종료되었을 때 answer가 빈 리스트면 -1을 추가한다. 3. 마지막으로 answer을 정렬하여 반환한다. python def solution(arr, divisor): answer = [] for number in arr: if not number%divisor: answer.append(number) if answer==[..

[Level1] 자릿수 더하기

문제 자연수 N이 주어지면 N의 각 자릿수를 더한 합을 출력한다. 입력 123 출력 6 어떤 수의 일의 자리를 구할 때는 %10을 하며 1000->100->10을 할 때는 10으로 나눴을 때 몫을 취한다. 위의 연산을 반복적으로 하여 자연수 N이 0이하면 종료하도록 한다. python def solution(n): answer = 0 while n>0: answer+=(n%10) n//=10 return answer c++ #include using namespace std; int solution(int n) { int answer = 0; while(n>0){ answer+=(n%10); n/=10; } return answer; }

[Level1] 시저 암호

문제 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 한다. 문자열 s와 거리 n이 입력되었을 때 시저 암호를 출력하는 함수를 만들어보자 공백은 밀어도 그대로 공백이며 입력되는 s는 소문자, 대문자, 공백으로만 이루어져있다. 거리 n은 1이상 25이하의 자연수이다. 입력 "a B z" 4 출력 "e F d" 처음에 거리가 25도 입력될 수 있다는 것을 고려하지 않았다. 그래서 'Z'에서 n을 더한 값이 90초과 97미만일 때만 'A'부터 시작하도록 했다. 만약 'Z'에서 25를 더하면 115가 되었는데 이 부분은 소문자 알파벳이 출력되었다. 따라서 소문자, 대문자에 따라 다르게 계산을 하여 출력하도록 하였다. 1. 문자열의 인덱스를 탐색하여 공백일 때는..

[Level1] 두 정수 사이의 합

문제 두 정수 a, b가 입력되었을 때 a와 b사이의 정수를 더하여 출력해보자. 입력되는 두 개의 정수는 대소구분없이 입력되며 -10,000,000 이상 10,000,000 이하의 정수이다. 입력 3 5 5 3 3 3 출력 12 12 3 1. a와 b 사이의 크기를 비교하여 합을 구한다. 2. a와 b가 같다면 a를 return한다. 3. 이후 a와 b의 크기에 따라 다른 for문으로 합을 구하도록 한다. python def solution(a, b): answer = 0 if a==b: return a elif a>b: for num in range(b,a+1): answer+=num else: for num in range(a,b+1): answer+=num return answer c++ #incl..

[Level1] 서울에서 김서방 찾기

문제 여러 개의 문자열을 갖는 리스트가 입력되었을 때 "Kim"을 찾아본다. "Kim"이 존재하는 인덱스를 찾아 "김서방은 (인덱스)에 있다."를 출력해보자. 입력 ["Jane", "Kim"] 출력 "김서방은 1에 있다" 1. "Kim"의 인덱스를 저장할 idx를 선언하고 0으로 초기화한다. 2. seoul 리스트에서 원소를 뽑아서 "Kim"을 찾는 탐색을 진행하고 idx을 1씩 증가시킨다. 3. "Kim"을 찾았을 때 break를 하여 탐색을 종료하고 4. answer에 "김서방은 {}에 있다".format(idx)를 대입한다. def solution(seoul): answer = '' idx=0 for name in seoul: if name=='Kim': break idx+=1 answer="김서방..

[Level1] 두 개 뽑아서 더하기

문제 여러 개의 정수가 포함된 리스트가 입력으로 들어온다. 이 때 리스트의 수 중 두 개를 뽑아 만들 수 있는 모든 합을 오름차순으로 정렬하여 출력해보자. 여기서 합이 같은 값은 중복을 제거하여 정렬한다. 입력 [2,1,3,4,1] 출력 [2,3,4,5,6,7] 1. 이중 for문을 통해 두 개의 수를 뽑는 조합을 생성한다. 2. 뽑은 두 개의 수를 더하여 answer에 추가한다. 3. set을 통해 answer에 중복된 수를 제거하고 list로 다시 변환한다. 4. 최종적으로 answer을 오름차순으로 정렬하여 반환한다. def solution(numbers): answer = [] for y in range(len(numbers)): for x in range(y+1,len(numbers)): ans..

[Level1] 이상한 문자 만들기

문제 입력된 문자열은 공백을 기준으로 여러 개의 단어로 구성되어 있다. 단어의 인덱스가 짝수이면 대문자로 홀수면 소문자로 변경하여 반환하도록 해보자. 문자열 전체의 인덱스가 아닌 각 단어의 인덱스로 홀/짝을 구분하며 0은 짝수처럼 변경한다. 입력 "try hello world" 출력 "TrY HeLlO WoRlD" 1. 각 단어의 인덱스를 구분할 idx를 선언하고 0으로 초기화한다. 2. 입력된 문자열로 for문을 돌린다. 3. 빈 칸일때 idx를 0으로 초기화하고 answer에 공백을 추가한다. 그리고 continue를 하여 아래의 코드는 실행하지 않도록 한다. 4. 각 단어의 홀수면 소문자로 변경하고 idx를 1증가, 짝수면 대문자로 변경하고 idx를 1증가한다. 5. 최종적으로 answer를 출력한..

728x90
반응형