본문 바로가기

온라인저지144

[BOJ]2605번: 줄 세우기 2605: 줄 세우기 풀이이 문제는 여러가지 방법으로 풀 수 있다는 생각을 했다.스택으로도 풀 수 있고, swap으로도 풀 수 있다는 생각을 했지만 나는 swap으로 했다. 별로 추천하고 싶은 방법은 아니지만 도저히 이 방법 밖에는 생각이 나지 않았기 때문에 이 방식으로 문제를 해결했다. 1) 우선 나는 1부터 n까지의 숫자를 배열에 다 채웠다.2) 반복문을 i = 0 ~ i < n 만큼 도는데, 변수 idx의 값은 i에 따라 바뀐다.(순서대로 돌기 때문에)3) 뽑은 번호를 x라고 할 때 x == 0이면 아무런 행동도 취하지 않으므로 continue를 해주고 나머지 경우에는 x번 만큼 반복문을 돌면서 swap을 해주면 된다. 4) 마지막 출력!!! 아직도 잘 모르겠다고요? 네 충분히 이해합니다. 저도 다.. 2017. 9. 3.
[BOJ]2309번: 일곱 난쟁이 2309: 일곱 난쟁이 풀이무식하게 brute force를 해보자. 제한된 상황에서는 이런 좋은!! 알고리즘이 어디 있겠는가. 처음에 어떻게 풀어야 할 지 모르겠어서 헤맸다. 나는 어떻게 풀었냐면 일단 9명의 키를 다 더한다.그리고 키 순서 대로 정렬을 시켰다. 반복문을 돌면서 sum - (i번째 값 + j번째 값) == 100이 되면 i와 j의 인덱스를 저장해서 출력을 할 때 그 인덱스는 거르고 출력 할 수 있게 했다. 코드123456789101112131415161718192021222324252627282930#include #include using namespace std; int arr[9], i, j, sum =0, save_index1, save_index2; int main(){ for .. 2017. 9. 3.
[BOJ]2783번: 삼각 김밥 2783: 삼각 김밥풀이단순 구현 문제다. 나는 1g 당 가격으로 주어지는 값 마다 비교해서 최소값을 구한 것을 *1000 해주었다. 코드 1234567891011121314151617181920212223#include double MIN(double a, double b, double c){ return a > b / c ? b / c : a;}int main(){ int get; double numx[101], y[101], omg = 0, ori, pri; scanf("%d %d", &pri, &ori); omg = pri / ori; scanf("%d", &get); for (int i = 0; i 2017. 9. 3.
[BOJ] 2477번: 참외밭 링크 : https://www.acmicpc.net/problem/2477 2010년 초등부 3번 문제다. (4,5번은 나중에 풀어봐야겠다) 이 문제는 입력 값이 어떻게 주어지든 간에 이.어.져.서 주어진다는 것을 이용하면 된다.직사각형 넓이 최대값 구하는 것은 쉽고 (가로, 세로 MAX 값 구해서 곱해주면 된다. 이것 또한 가로, 세로는 연결되어 있으니깐 잘 이용하면 된다!),작은 직사각형을 구해서 빼줘야 한다. 근데 여기서 알아야 할 것이 참외밭은 무조건 육각형이라는 것이다.그렇기 때문에 가로, 세로의 최대값이 나온 지점에서 가로의 index를 i라고 하면 i를 +3, +4 해준 값을 곱하면 작은 직사각형이라는 것이다!"잘 모르겠으면 그림을 보면서 비교를 해보자."그렇게 해서 최대 직사각형 넓이를 구.. 2017. 8. 26.
[BOJ]2476번: 주사위 게임 링크 : https://www.acmicpc.net/problem/2476 2010년 초등부 2번 문제다. 이 문제는 MAX 함수랑 비교 연산만 해주면 된다.쉬우니깐 코드로 바로 가시죠.123456789101112131415161718192021222324252627282930#include #include using namespace std; int maxiiii(int a, int b) { return a > b ? a : b; }int main(){ int n, a[1002][3], result[1002],MAX = 0; cin >> n; for (int i = 0; i > a[i][0] >> a[i][1] >> a[i][2]; if (a[i][0] == a[i][1] && a[i][1] == a[.. 2017. 8. 26.
[BOJ]2475번: 검증수 링크 : https://www.acmicpc.net/problem/2475 2010년 초등부 1번 문제다. 문제에 써 있는 대로 써주면 된다.12345678910111213#include int main(){ int a[5], sum = 0; for (int i = 0; i 2017. 8. 26.
[BOJ]1735번: 분수 합 1735번: 분수 합 https://www.acmicpc.net/problem/1735 이 문제는 심심풀이로 올려본다.중학교? 이상이면 다 풀 수 있는 문제다. 근데 여기서 기약 분수로 해줘야 하므로, 분모에 있는 값과 분자에 있는 값의 최대 공약수를 구해서 그 수로 나눠주면 기약분수가 된다. 최대 공약수를 구하는 방법은 유클리드 아저씨가 만드신 유클리드 호제법이라는 게 있는데 굉장히 좋당... 유클리드 호제법(위키피디아): https://goo.gl/gsRPhY 링크를 남겨둘 테니, 한번 쭉 읽어보길 바랍니다. 1234567891011121314151617181920#include int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main(voi.. 2017. 8. 13.
[BOJ]11507번: 카드셋트 11507번: 카드셋트https://www.acmicpc.net/problem/11507 1.하나의 통 문장으로 받을 배열 하나. 2. 카운트 배열 하나.3. 확인용 bool형 2차원 배열 하나 [숫자 개수][모양 개수](#include 필수. C99이후부터 있다) a, b에서 a는 숫자의 10의 자리를 받는 것이고, b는 1의 자리를 받는 것이다.Cc는 'Clone c'이라고 대회 도중이라 대충 썼는데, char c의 정수형을 받는 것이다.(아마 굳이 이렇게 안 해줘도 되긴 할 거다.) 문자열에서 char형인 숫자를 int형으로 바꾸는 방법은 한 자리 수 일때, str[i] - '0'를 해주면 된다. 나머지는 for문을 str의 길이만큼 돌면서 처리해주면 된다. 1234567891011121314151.. 2017. 8. 13.
[icpc.me]10798번: 세로읽기 writeup 10798번: 세로읽기 링크 적용 범위 : 문자열! 이 문제는 문자열에 대한 이해도를 높이는 데 좋은 문제 중 하나라고 생각합니다. 문제는 링크를 통해 확인하시길 바랍니다! A A B C D D a f z z 0 9 1 2 1 a 8 E W g 6 P 5 h 3 k x 대충 이런 식으로 존재한다면 Aa0apAf985··· 이렇게 출력을 해주면 되는 굉장히~ 간단하면서도 괜찮은 문제인 것 같습니다! 물론 저는 어려웠습니다... 처음에 힌트를 뭘로 드렸죠?? 맞습니다. 바로 문자열입니다. 저는 배열을 선언할 때 [5][15]의 크기를 갖고 있는 char형 배열을 선언 했습니다. 이렇게 하면 조금 문제 풀기가 쉬워지는 이유가 [5][15]에서 사실 입력되는 값은 15보다 작은 수 있는데 그것은 예외처리를 해주.. 2017. 7. 20.