알고리즘 풀이/프로그래머스 109

[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를 출력한..

[Level1] 수박수박수박수박수박수?

문제 길이가 n이고 "수박수박수박수박 - - -"처럼 반복되는 문자열을 출력하려고 한다. n이 3이면 "수박수"라고 출력하고 n=6이면 "수박수박수박"을 출력하도록 한다. 입력 5 출력 "수박수박수" 1. 입력된 n만큼의 반복문을 생성한다. 2. 인덱스가 홀수면 "수"를 answer에 추가하고 짝수면 "박"을 answer에 추가한다. def solution(n): answer = '' for i in range(1,n+1): if i%2: answer+='수' else: answer+='박' return answer

[Level1] 문자열 다루기 기본

문제 문자열의 길이가 4 또는 6이고 숫자로만 구성되어 있으면 True, 그렇지 않다면 False를 반환하는 함수를 만들어본다. 문자열의 길이는 1이상 8이하이다. 입력 "a123" 출력 False 1. 처음에 문자열의 길이가 4가 아니고 6이 아니면 바로 False를 반환하도록 한다. 2. 이후 문자열을 탐색하여 'a' ~ 'z'에 속해있거나 'A' ~ 'Z'에 속해있으면 answer에 False를 대입하고 탐색을 종료한다. 3. 최종 answer를 출력한다. (위에 조건에 걸리지 않았다면 answer는 그대로 True일 것이다.) def solution(s): answer = True s_len=len(s) if s_len!=4 and s_len!=6: answer=False return answer..

[Level1] 문자열 내 p와 y의 개수

문제 문자열이 입력되었을 때 p와 y의 개수를 비교한다. 만약 두 문자의 개수가 같으면 True, 다르면 False를 출력한다. 이때 대소문자를 구분하지 않으며 p와 y가 하나도 없는 경우는 항상 True를 출력한다. 입력 "pPoooyY" 출력 True 1. p와 y의 개수를 count할 변수 2개를 생성한다. (cnt_p, cnt_y) 2. 문자열의 첫 번째 인덱스부터 탐색하여 p or P일 때는 cnt_p를 증가, y or Y일 때는 cnt_y를 증가시킨다. 3. 탐색이 종료된다면 cnt_p와 cnt_y를 비교하여 같으면 True, 다르면 False를 반환한다. def solution(s): answer = True cnt_p=0 cnt_y=0 for idx in range(len(s)): if s..

[Level1] 가운데 글자 가져오기

문제 문자열이 입력되면 가운데 글자를 반환하는 함수를 만들어본다. 만약 문자열의 길이가 짝수면 가운데 두 글자를 반환하도록 한다. 입려되는 문자열의 길이는 1이상 100이하이다. 입력 "abcde" "qwer" 출력 "c" "we" 1. 문자열의 길이가 홀수, 짝수인 경우에 따라 반환되는 글자의 수가 다르기 때문에 입력된 문자열의 길이를 구한다 2. 문자열의 길이를 통해 홀수, 짝수를 판단한다. 3. 홀수일 때는 문자열의 길이에서 2를 나눈 인덱스를 반환하며, 짝수일 때는 문자열의 길이에서 2를 나눈 인덱스에서 -1한 것과 2를 나눈 인덱스를 반환한다. def solution(s): answer = '' s_len=len(s) if s_len%2: answer+=s[s_len//2] else: answe..

728x90
반응형