목록코딩테스트 연습/기타 (6)
beepbeep

문제 2차원 배열이 주어집니다. 주어진 2차원 배열을 시계방향으로 90도 회전시키세요. 단, 2차원 배열을 새로 만들지 않고 주어진 2차원 배열만 이용해서 회전시켜야 합니다. 살펴보기 2단계로 나누어서 풀 수 있습니다. 1단계 가상의 우하향 대각선을 배열에 그려주고, 대각선을 기준으로 양쪽 값을 바꿔줍니다. 2단계 배열의 가운데 열을 기준으로, 좌우 대칭되는 지점의 값을 바꿔줍니다. 시계방향으로 90도 돌아간 모습의 2차원 배열이 완성되었습니다. 이 과정을 코드로 옮겨주면 끝! 풀어보기 for(int i=0; i
한때 sns에서 유행했던 일명 콜라 문제를 풀어낼 수 있는 코드를 작성하는 문제이다. n = 현재 가지고 있는 빈 병의 개수 a = 새 음료와 교환할 때 필요한 할 빈 병의 개수 b = 빈 병 a개와 교환할 수 있는 새 음료의 개수 처음에 푼 방법 int answer = 0; int remain = 0; while(n >= a){ if(n % a != 0) { remain += n % a; } n = n / a * b; answer += n; if(remain >= a || a > n){ n += remain; remain = 0; } } return answer; 처음에 작성한 내용인데... 요구사항을 해결하긴 했지만 불필요한 부분이 많이 들어있다. 나머지 변수를 만든다던지, n의 나머지가 있을 때 나..
기본적인 방법 // number : 주어진 숫자 // count : 약수의 개수 int count = 0; for(int i=1; i
반복횟수가 얼마나 차이날지 궁금해서 비교해보았다.. 나누기 int answer = 0; while(chicken >= 10){ int service = chicken / 10; chicken = chicken % 10 + service; answer += service; } return answer; 치킨이 1,000,000마리인 경우 반복문이 6번 실행된다. 뺴기 int answer = 0; while(chicken >= 10){ if(chicken >= 10) { chicken -= 9; answer++; } } return answer; 치킨이 1,000,000마리인 경우 반복문이 무려 111,112번 실행된다. 통과 안될줄 알았는데, 단순한 연산이라 그 정도는 아니었던 것 같다... 결과 비교 나..

문제 살펴보기 주어진 구슬 중 n개를 꺼낸다고 할 때, 가능한 경우의 수를 세서 반환하는 문제이다. 생각하기 관련 공식이 주어져 있어서, 공식만 적용하면 해결될거라고 생각했지만... 큰 함정이 숨어있었다. 바로 자료형의 범위이다. 이 문제에서는 팩토리얼을 다룬다. 그러다 보니 숫자의 값이 순식간에 커져서, 숫자를 있는 그대로 다룰 경우 int 자료형은 물론이고, double 자료형으로도 감당이 되지 않는다. (13! 에서 이미 int 자료형의 범위를 크게 뛰어넘고, 21! 까지 가면 long 자료형의 최대값의 5배보다도 큰 값을 가진다..) 아주 기본적이면서 중요한 개념인데, 몇 번 실행하고 오류화면을 본 후에야 떠올렸다.... 문제를 푸는 방식은 크게 두 가지로 나눌 수 있을 것 같다. 1. BigIn..
문제 살펴보기 이번 문제는 주어진 문자열에서 가장 마지막에 위치한 단어의 길이를 계산하는 문제이다. 예를 들어 주어진 문자열이 "Hello World"이면, 마지막에 사용한 단어가 World이므로 그 길이인 5를 반환하면 된다. 생각의 흐름 처음에는 문자열을 뒤에서부터 검사해 공백을 찾은 후, 공백 다음 문자부터 문자열이 끝날때까지의 길이를 세면 된다고 생각했으나 예시로 주어진 문자열 중 끝부분에 공백이 있는 문자열이 있었다. 예를 들면 " Hello World " 같은 문자열이다. 문자열의 끝 부분에 공백이 있으므로, 앞서 생각했던 방법을 적용하면 단어를 찾을 수 없다... 그래서 문자열에서 마지막으로 사용된 단어의 시작 인덱스와 끝 인덱스를 찾은 후, 길이를 계산하기로 했다. 풀어보기 // 단어의 길..