본문 바로가기

알고리즘43

[python] 시저 암호(연습문제) 문제의 목표는 간단하다 카이사르 암호라고도 불리는 가장 오래된 암호법인 치환 암호를 구현하면 된다. 주어진 매개변수 s가 'a'이고 n이 2라면 'a'를 2번 밀어낸 'c'로 치환되는 것이다. 'z'에서 1을 밀어내면 'A'가 되는 것이 아닌 다시 처음인 'a'로 되돌아간다. 즉, 소문자는 소문자에서만 대문자는 대문자에서만 공백은 공백으로 치환하면 된다. 설계 및 구현 구현을 위해 주어진 함수에는 암호문으로 변경해야 하는 평문이 담긴 매개변수 s와 해당 문자열의 문자를 몇 칸 밀어 암호문으로 변경할지 암호화 키 역할을 하는 매개변수 정수 n을 가진다. 구현 내용을 생각해보면 주어진 정수 값에 의해 알파벳이 뒤로 밀려난다. 그러면 알파벳을 정수로 바꾼 아스키코드를 이용하여 주어진 정수를 더하여 아스키코드를.. 2020. 5. 3.
[C++] 약수의 합(연습문제) 문제의 목표는 주어진 수 n의 모든 약수에 대한 합을 반환하면 되는 간단한 문제이다. 이때 약수에는 자기 자신까지 포함된다. 즉, n=7이라면 약수는 1, 7로 약수를 모두 더한 8을 반환하면 된다. 구현 및 설계 구현을 위해 주어진 함수는 반환 타입 int를 가지며 약수들을 구해 합을 구해야 할 정수 n을 매개변수로 가진다. 구현 내용은 파이썬에서 생각했으므로 바로 구현하자. ① n의 최대 약수인 n/2까지의 모든수들을 n과 나누어 나머지가 0인지 확인 ② 나머지가 0이라면 결과값에 더하기 ①은 반복문을 통해 간단히 수행할 수 있다. 이때 반복문 안에서 나머지가 0인지 확인하면 된다. ②를 수행하기 위해 반환할 변수에 n값을 할당하고 앞선 조건을 만족하면 누적하여 다하고 반환한다. 반복문이 n/2까지만.. 2020. 4. 12.
[python] 약수의 합(연습문제) 문제의 목표는 주어진 수 n의 모든 약수에 대한 합을 반환하면 되는 간단한 문제이다. 이때 약수에는 자기 자신까지 포함된다. 즉, n=7이라면 약수는 1, 7로 약수를 모두 더한 8을 반환하면 된다. 설계 및 구현 구현을 위한 함수는 약수를 찾아야 하는 n이 매개변수로 있는 간단한 함수이다. 구현내용은 간단히 생각하면 n보다 작은 수들을 모두 찾아 해당 수들을 사용해 n을 나누어 나머지가 0인지 확인하면 된다. 만약 n이 3000일 때 작은 수를 모두 확인한다면 확인해야 할 숫자가 너무 많기 때문에 효율이 떨어진다. 따라서 확인할 숫자는 약수중 최대가 되는 숫자인 n/2 까지만 확인하면 된다. ① n의 최대 약수인 n/2까지의 모든수들을 n과 나누어 나머지가 0인지 확인 ② 나머지가 0이라면 결과값에 더.. 2020. 4. 12.
[C++] 문자열을 정수로 바꾸기(연습문제) 문제의 목표는 간단하다 입력받은 문자열 s를 숫자로 변경하여 반환하면 된다. 이때 s는 부호와 숫자로만 이루어져 있다. 따라서 s가 "+123"이라면 123을 "-123"이라면 -123을 반환하면 된다. 설계 및 구현 구현을 위한 함수는 반환 타입 int를 가지며 숫자로 변환할 매개변수 string타입 s를 가진다. 구현을 위한 내용은 파이썬에서 고안했으므로 바로 구현하자. ① s를 문자 하나씩 잘라내기, 문자를 정수로 변환하기 위한 테이블 준비 ② 잘라낸 문자를 테이블에서 찾아서 알맞은 정수로 변환하고 자릿수마다 더해주기 ③ 맨 마지막 부호가 -라면 -1을 곱해서 반환 +라면 그냥 반환 ① 각 문자를 알맞은 숫자로 변환하기 위한 테이블을 위해 map을 사용하여 key값에 아스키코드를 이용해 변환한 문자.. 2020. 4. 5.
[python] 문자열을 정수로 바꾸기(연습문제) 문제의 목표는 간단하다 입력받은 문자열 s를 숫자로 변경하여 반환하면 된다. 이때 s는 부호와 숫자로만 이루어져 있다. 따라서 s가 "+123"이라면 123을 "-123"이라면 -123을 반환하면 된다. 설계 및 구현 구현을 위해 주어진 함수는 숫자로 변환할 매개변수 s를 가지는 간단한 함수이다. 물론 return int(s)를 통해 간단하게 해결할 수 있지만 알고리즘 연습을 위해 형변환 int() 함수는 사용하지 않고 연습을 해보자. 구현의 내용을 생각해보면 해당 문자열을 하나씩 전부 잘라내어 자릿수마다 더해주는 과정이 필요하다 이때 더하려면 해당 문자가 정수형이어야 하므로 문자를 정수로 변환할 dictionary가 필요로 하다. 이때 맨 마지막에 부호를 판별하여 -라면 -1을 곱하여 반환하고 +라면 .. 2020. 4. 5.
[C++] 소수 찾기(연습문제) 문제는 간단하다 1부터 입력받은 숫자 n까지 중 소수가 몇 개 있는지 반환하면 된다. n이 10이라면 1부터 10에는 2, 3, 5, 7 총 4개의 소수가 존재하므로 4를 반환하고 5라면 2, 3, 5 총 3개의 소수가 존재하므로 3을 반환한다. 설계 및 구현 구현을 위해 주어진 함수는 반환 타입으로 int를 가지고 매개변수 int타입의 n을 가지는 함수이다. 구현의 내용은 파이썬과 마찬가지로 에라토스테네스의 체를 사용하면 된다. 구현 내용은 파이썬과 같으므로 정리하면 ① n까지의 모든 숫자 나열 ② 2의 배수, 3의 배수 ... 남은 소수들의 배수 모두 지우기 ①을 수행하기 위해 소수판별을 위한 숫자를 벡터에 넣는 것이 아닌 인덱스로 사용한다. 벡터에 n+1의 개수만큼 True로 만든다. 1부터가 아닌.. 2020. 4. 3.