-
[BOJ] 1629 곱셈알고리즘/백준 알고리즘 2022. 8. 30. 22:54
문제 이해하기 A를 B번 곱한 수를 C로 나눈 나머지의 값을 어떻게 알 수 있을까? 이때 각 숫자의 크기는 2,147,483,674 라는 매우 큰수이다. 예제 입력으로 이해하기 A :10 B :11 C: 12 10^11 % 12 = 10^5 * 10^5 * 10 % 12 = (10^2 * 10^2 * 10 ) * (10^2 * 10^2 * 10 ) % 12 = ((10*10) * (10*10) * 10 ) * ((10*10) * (10*10) * 10 ) % 12 알고리즘 각 변수의 크기가 크기 때문에 long long 타입으로 선언하자 재귀 함수를 이용해서 문제를 쪼개서 풀수 있다. cal(10, 11) = cal(10, 5) * cal(10, 5) * 10 % 12 B가 홀수인 경우에는 cal(A, ..
-
[BOJ] 1213 팰린드롬 만들기알고리즘/백준 알고리즘 2022. 8. 30. 00:20
문제 이해하기 영어 문자열을 받아서 팰린드롬으로 바꿔야 한다 예제 입력으로 문제 이해하기 입력 : AABB 출력 : ABBA A : 2개 B : 2개 BB ABBA 입력 : AAABB 출력 : ABABA A : 3개 B : 2개 BB ABABA 알고리즘 알파벳의 개수를 찾는다 알파벳의 개수가 홀수인 알파벳이 2개 이상인 경우는 불가능 한 경우이다. 사전순으로 앞서는 것을 출력해야 하므로 Z > A 순으로 데이터를 앞뒤로 붙여준다. 알파벳의 개수가 홀수가 1개 있었던 경우 문자열의 중간에 넣어준다. 코드 #include using namespace std; string s, ret; char mid; int cnt[200], flag; int main(){ cin >> s; // step 1 : 알파벳의 ..
-
Clean Code독서 2022. 4. 23. 23:53
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. ...중략... 다시 돌아와 정리하겠다고 다짐했었다. 나중은 결코 오지 않는다. 맞다... 구현하기에 급급해 쓰레기 코드를 양산해 냈다. 어쩔수 없었다. 이렇게 해야만 했다. 다른 방법은 보이지 않았다. 나중에 고치기로 마음먹었었다. 다른 소스코드들을 통해 좋은 소스코드를 발견했고 수정하고 싶었다. 하지만 QA중이기에 함부로 고치기가 무서웠다. 분명히 체크했는데 왜 안되죠? 라는 소리를 듣기 싫었다. 어떻게 하면 한번에 좋은 코드를 작성할수 있을까? 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 점감하는 방법일 뿐 아니라 전문가로써 살아남는 길이라는 사실을 인정하리라. "깨끗한 코드를 어떻게 작성할까?", 깨끗한 코드..
-
[프로그래머스] JS 없는 숫자 더하기알고리즘/프로그래머스 2022. 4. 13. 21:09
문제 이해하기 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 데이터 추상화 0 ~ 9 까지 들어있는 배열을 만들어 선택되지 않는 값이 무엇인지 발견하도록 하자. let list = [0,1,2,3,4,5,6,7,8,9]; 알고리즘 정수 배열 numbers를 순환하면서 list의 선택된 값은 0을 할당 list 값을 더한 값을 리턴한다. function solution(numbers) { let list = [0,1,2,3,4,5,6,7,8,9] var answer = 0; numbers.forEach( ele => { list[..
-
[프로그래머스] JS 크레인 인형뽑기 게임알고리즘/프로그래머스 2022. 4. 13. 09:10
문제 이해하기 크레인을 모두 작동시켜 사라진 인형의 개수를 return 해야한다. (필자는 몇번 사라졌는지로 잘못이해하여 뻘짓했다.) 데이터 추상화 크레인을 작동시키는 함수로 먼저 추상화하자. 매개 변수인 moves를 활용하자. 자료구조 stack에 크레인으로 잡은 값을 넣자. - stack의 pop을 이용하여 쉽게 구현을 할수 있기에.. 알고리즘 moves.forEach()를 사용하여 크레인을 작동시킨다. 크레인은 board를 가로가 아닌 세로로 동작하기 하기 때문에 세로로 반복문을 돌려준다. 크레인으로 뽑힌 값, stack에서 pop() 한 값을 비교한다. 같지 않으면 push 하고, 같다면 리턴하여 무시하자. function solution(board, moves) { var answer = 0; ..
-
[프로그래머스] JS 키패드 누르기알고리즘/프로그래머스 2022. 4. 12. 23:32
문제 이해하기 키패드를 누른 엄지손가락이 왼손인지 오른손인지를 나타내야한다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락(Left)을 사용. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락(Right)을 사용. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락(Left, Right)을 사용. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다. 데이터 추상화 *, 0, # 을 10, 12, 13으로 추상화 함 각 번호 별로 어떤 손으로 ..
-