본문 바로가기

Problem Solving

BOJ 10820 - 문자열 분석 문제 링크https://www.acmicpc.net/problem/10820 문제 해결1. 문자열이 최대 N개까지 주어지고, 그 문자열에서 알파벳 소문자, 대문자, 숫자, 공백의 수를 차례로 출력. 주의할 점1. 입력의 수가 주어지지 않는다. 이럴 땐 EOF를 확인하는 while문을 사용한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 2870 - 수학숙제 문제 링크https://www.acmicpc.net/problem/2870 문제 해결1. "001abc3fd2" 같은 문자열이 들어오면, 1, 3, 2로 숫자를 파싱한다. 2. 비내림차순으로 출력한다. 주의할 점1. 한 문자열이 최대 100의 길이를 가질 수 있으므로, 숫자를 파싱할 때는 문자열 형태로 파싱한다. 2. 정렬할 때 정렬 조건을 설정해줘야한다. bool형으로 함수를 선언한다. 만약 true라면 순서를 바꾸지 않고, false라면 순서를 변경한다. 참고로 비교할 때, strict하게 대소 비교를 해야한다. 3. 0으로 시작하는 문자열은 0의 중복을 제거해야한다. 즉, "00002"는 "2"로, "00000"은 "0"으로 파싱한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 3055 - 탈출 문제 링크https://www.acmicpc.net/problem/3055 문제 해결1. ' S '에서 출발해서 D까지 이동하는 최소 시간을 출력한다. 2. ' X '로 되어있는 장애물과 ' * '로 되어있는 물로는 이동할 수 없다. 오직 ' . '로만 이동할 수 있다. 3. 만약 이동할 수 없다면, "KAKTUS"를 출력한다. 주의할 점1. ' * '과 ' . '을 같은 큐로 구현해야 메모리 초과를 막을 수 있다. 2. 문제에 있듯이, 고슴도치는 물이 이동할 자리론 이동할 수 없다. 즉, ' * '의 확장이 고슴도치의 이동보다 먼저 구현되어야한다. 3. 그러므로, queue에는 ' * ' -> ' . ' -> ' * ' -> ' . ' .... 이러한 순서로 들어가야한다. 4. 물의 확장을 적절하게 구.. 더보기
BOJ 10216 - Count Circle Groups 문제 링크https://www.acmicpc.net/problem/10216 문제 해결1. 결국 두 원 사이의 관계를 구해야 하는 문제. 그 후에 완전탐색을 통해 해결할 수도 있으나 여기선 Union & Find로 해결함. 2. (두 원의 중심 사이의 거리) 더보기
BOJ 11051 - 이항계수 2 문제 링크https://www.acmicpc.net/problem/11051 문제 해결1. 이항 계수를 구하는 메모이제이션을 구현. 단, 정답은 10,007로 나눴을 때의 나머지를 출력한다. 주의할 점1. a%mod + b%mod = ((a+b)%mod)%mod 임을 알아야한다. (사칙연산에 모두 적용 가능하다) 2. 마지막 출력 전에 나머지 연산을 잊지 말고 해줘야한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 1157 - 단어 공부 문제 링크https://www.acmicpc.net/problem/1157 문제 해결1. alpha[]라는 배열을 만들어서 A부터 z까지의 알파벳을 index로 취한다. 이 때, 0부터 25까지의 정수로 만든다. 2. 임의의 i번째 문자에 대한 배열의 값을 1만큼씩 크게 만들어준다. 3. 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 2개 이상이면 '?'를 출력한다. 주의할 점1. 대소문자를 구분하지 않는다. 즉 A와 a는 A로 인식한다. 아스키코드 값에 의해서 소문자가 나오면 적절한 값을 빼서 대문자와 같게 한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 1149 - RGB거리 문제 링크https://www.acmicpc.net/problem/1149 문제 해결1. dp[i][1~3] = i번째 집에 Red or Green or Blue를 칠할 때 드는 비용. 2. 이웃한 집에는 같은 색을 칠할 수 없고, N번째 집까지 칠했을 때 최소 비용을 구한다. 주의할 점1. dp라는 배열을 이용해서 바로바로 저장하면서 값을 구할 수 있다. 2. 이웃한 집의 색은 이전 집만 겹치지 않게 구현한다면 결과적으로 양 옆으로 겹치지 않게 된다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 9933 - 민균이의 비밀번호 문제 링크https://www.acmicpc.net/problem/9933 문제 해결1. map을 적절히 사용하는 문제. 2. 입력 받은 문자열을 map에 저장한다. 3. 입력 받은 문자열의 역 문자열이 map에 있는 지 확인한다. 4. 만약 존재한다면 그 문자열의 길이와 가운에 글자를 출력한다. 주의할 점1. map 구현을 잘 해야한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 11060 - 점프 점프 문제 링크https://www.acmicpc.net/problem/11060 문제 해결1. DP[i] = i번째에서 끝까지 이동하는 최소 이동 횟수. 주의할 점1. 처음에 DP 배열의 모든 값들을 큰 값들로 초기화한다. 2. 매번 값을 확인해줄 때, 최소값으로 갱신해야한다. 3. input이 1이 되면 0을 출력하는 지 확인한다. ※ 정확하고 부드러운 태클은 언제나 환영입니다. 더보기
BOJ 13567 - Robot (2016 대전 regionals) 문제 링크https://www.acmicpc.net/problem/13567 문제 해결1. 아주 기본적인 구현 문제다. 2. X좌표와 Y좌표로 나눠서 위치를 갱신하고 마지막 위치를 출력한다. 만약 맵을 벗어나면, -1을 출력한다. 주의할 점1. 'TURN' 이라는 명령어를 받았을 때 left or right로 움직여야한다. 이 부분을 구현하는 것이 내겐 좀 어려웠다. 이 부분은 S 모 회사에서도 구현을 요구했던 적이 있어서 확실히 알고 넘어가야한다. 2. 배열을 사용해서 X좌표와 Y좌표를 변화시켜 방향을 전환한다. 여기서 index부분이 음수가 되기 전에 미리 예외 처리를 해줘야한다. 3. 맵을 벗어나는 invalid한 상황을 잘 처리해야한다. 현재 명령어를 실행한 후, 다음 명령어를 받기 전에 처리해한.. 더보기