알고리즘 22

[C++] 백준 알고리즘 1152번 (단어의 개수)

문제 이번에 다뤄볼 문제는 1152번 문제 '단어의 개수'입니다. 문장을 입력받고 문장이 끝나는 부분까지의 개수(문자+띄어쓰기)를 구해낸 다음 for문을 돌며 띄어쓰기가 발견될때 num값을 증가시켜줍니다. 만약 문장의 끝 혹은 시작에서 띄어쓰기가 포함되어 있다면 num을 하나 빼줍니다. 마지막에서 띄어쓰기만 입력되었을 경우를 예외처리 해주면 마무리가 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include #include using namespace std; int main() { char arr[1000001]; int count = 0, num = 0; cin.getline(arr, 1000001); while (arr[count] != '\0') count+..

algorithm 2019.01.20

[C++] 백준 알고리즘 1913번 (달팽이)

문제 이번에 다뤄볼 문제는 1913번 문제 '달팽이'입니다. 달팽이 문제에서 연습해야 하는 key-point는 2차원 배열과 이중포문입니다. 이번 문제는 아래 코드를 보며 같이 설명드리겠습니다. rcheck = 0, ccheck = 0 // 왼쪽 끝, 위쪽 끝을 나타내기 위한 값입니다. rlimit = 0. climit = 0 // 오른쪽 끝, 아래쪽 끝을 나타애기 위한 값입니다. rlimit, climit의 경우 N값을 입력 받았을때 N-1값으로 대체시켜줍니다. 이후 for문을 돌며 4개의 분기문을 만들어줍니다. 2차원 배열을 (0,0)부터 채워나가기 시작 할 것이므로 N*N값부터 1씩 줄여가며 배열을 완성합니다. N을 소인수분해 했을때 나타날 수 있는 인수중 가장 큰 값은 루트N입니다. 따라서, 2부..

algorithm 2019.01.20

[C++] 백준 알고리즘 10799번 (쇠막대기)

문제 이번에 다뤄볼 문제는 10799번 문제 '쇠막대기'입니다. 쇠막대기 문제에서 연습해야 하는 key-point는 스택입니다 쉽게 생각해보면 어렵지 않게 풀 수 있는 문제입니다. 레이저가 생기는 순간까지 몇개의 쇠막대기가 열려있는지를 판단하면 됩니다. 문제에서 주어진 예시를 보면 첫번째 레이저에서는 잘라지는 막대기가 존재하지 않습니다. 그러나 두번째 레이저를 보면 3개의 쇠막대기가 열려있는걸 볼 수 있습니다. 그럼 두번째 레이저에 의해 3개의 조각이 나올 수 있습니다. 세번째 레이저에서도 여전히 3개의 레이저가 열려있습니다. 그러므로 3개의 조각이 더 나오게 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include #include using namespace s..

algorithm 2019.01.20

[C++] 백준 알고리즘 2581번 (소수)

문제 이번에 다뤄볼 문제는 2581번 문제 '소수'입니다. M이상 N이하의 자연수 중 소수를 에라토스테네스의 체를 활용하여 구하고 처음으로 만나게 되는 소수가 최소값이므로 최초 소수를 min에 저장합니다. 이후 나오는 모든 소수들의 합을 구하면 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include using namespace std; int main() { bool arr[10001] = { false }; int m, n, min; int sum = 0, check = 0; cin >> m; cin >> n; for (int i = 2; i

algorithm 2019.01.20

[C++] 백준 알고리즘 1924번 (2007년)

문제 이번에 다뤄볼 문제는 1924번 문제 '2007년'입니다. 주어진 내용을 보면 2월은 28일까지 4,6,9,11은 30일까지 나머지는 31일까지 존재한다는 정보를 알아낼 수 있습니다. 따라서 입력으로 들어오는 목표날짜까지의 일수를 먼저 구한다음 이를 7로 나누어보면 답을 알 수 있습니다. 0이라면 일요일 ~ 6이라면 토요일이 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include using namespace std; int main() { int m, d; int answer; int count=0; cin >> m >> d; m -= 1; for (m; m >= 1; m--) { if (m == 2) { count += 28; } else if (m ==..

algorithm 2019.01.20

[C++] 백준 알고리즘 11653번 (소인수분해)

문제 이번에 다뤄볼 문제는 11653번 문제 '소인수분해'입니다. 소인수분해 문제에서는 크게 설명드릴만한 내용이 딱히 없습니다. N을 소인수분해 했을때 나타날 수 있는 인수중 가장 큰 값은 루트N입니다. 따라서, 2부터 루트N까지 for문을 돌면서 N을 나눌 수 있다면 계속 나눠주면 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include using namespace std; int main() { int n; cin >> n; for (int i = 2; i*i

algorithm 2019.01.20

[C++] 백준 알고리즘 1929번 (소수 찾기)

문제 이번에 다뤄볼 문제는 1929번 문제 '소수 찾기'입니다. 소수 찾기 문제에서 연습해야 할 key-point는 에라토스테네스의 체 입니다. 에라토스테네스의 체는 쉽게말해 소수를 구했을 경우 해당 수를 소수로 갖는 뒤의 숫자들을 배제시키는 방법이라고 생각하시면 됩니다. 아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다. 코드(C++) #include #include #pragma warning (disable:4996) using namespace std; int main(){ int pn = 0; bool c[1000001] = { false }; int m, n; scanf("%d %d", &m, &n); for (int i = 2; i

algorithm 2019.01.20

[C++] 백준 알고리즘 1978번 (소수 찾기)

문제 이번에 다뤄볼 문제는 1978번 문제 '소수 찾기'입니다. 소수 찾기 문제에서 연습해야 할 key-point는 소수찾는법을 암기하는것 입니다. 네이버에서 알고리즘 포스팅을 했을때 예상외로 많은 조회수를 올린 문제가 바로 이 소수찾기 문제였습니다. 소수는 모두가 잘 알고있듯, 약수가 1과 자기 자신밖에 없는 수를 칭합니다. 만약 입력된 N값이 소수가 아니라면 N = a x b (a

algorithm 2018.10.26

[C++] 백준 알고리즘 11005번 (진법 변환2)

문제 이번에 다뤄볼 문제는 11005번 문제 '진법 변환2'입니다. 진법 변환2 문제에서 연습해야 할 key-point는 10진법 수를 B진법으로 바꾸는 방법 입니다. 10진법 수를 B진법으로 바꾸는 방법만 알고있다면 이 문제는 사실 별로 설명할게 없습니다. 우선 10진법 수 하나를 B로 나눈 몫이 0이 될때까지 나머지를 계속 구해주면 됩니다. 예를 들어 보여드리자면 ex) 10진법 수 11을 3진법으로 바꾸시오 11/3 = 3 ... 2 3/3 = 1 ... 0 1/3 = 0 ... 1 3진법 수 = 102 이렇게 몫이 0이 될때까지 구하고 나머지 값들을 역순으로 적어주면 끝입니다. 추가적으로 혹시나 A:10, B:11 ... 이런식으로 10진법을 넘어가는 진법은 알파벳 대문자를 사용한다는 부분에서 막..

algorithm 2018.10.25

[C++] 백준 알고리즘 9613번 (GCD합)

문제 이번에 다뤄볼 문제는 9613번 문제 'GCD 합'입니다. GCD 합 문제에서 연습해야 하는 key-point는 유클리드 호제법과 재귀함수입니다. 유클리드 호제법은 두 양의 정수 또는 정식의 최대공약수를 구하는 방법입니다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘 뜻합니다. 2개의 자연수 a, b(a>b)에 대해서 a를 b로 나눈 나머지를 r이라고 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같습니다. 이 성질에 따라 GCD(a,b) = GCD(b,r) = GCD(r,r`) ... 를 반복하여 GCD(b,r)의 r이 0이되면 그때의 b가 최대공약수가 됩니다. ex) GCD(24,16) = GCD(16,8) = GCD(8,0) -> 최대공..

algorithm 2018.10.24
반응형