구현 10

백준 5014번 스타트링크 (C++)

문제 링크 : https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제 풀이는 다음과 같다. 1. 필요한 변수를 선언하고 값을 입력 받는다. 이때 f + 1의 사이즈 만큼 bool문형 배열을 선언한다. int f,s,g,u,d; cin >> f >> s >> g >> u >> d; vector ch(f+1,false); 참고로 bool ch[1000001]로 선언해도 무방하다. 이럴경우 memset이나 별도의 방법을 활용해 배열의 값을 false로 초기화 하는..

백준 14395번 4연산 (C++)

문제 링크 : https://www.acmicpc.net/problem/14395 14395번: 4연산 첫째 줄에 정수 s를 t로 바꾸는 방법을 출력한다. s와 t가 같은 경우에는 0을, 바꿀 수 없는 경우에는 -1을 출력한다. 가능한 방법이 여러 가지라면, 사전 순으로 앞서는 것을 출력한다. 연산의 아 www.acmicpc.net 이 문제는 복잡한 연산 없이 '-' 와 '/'의 사용 횟수 제한만 알고있으면 금방 풀 수 있다. 어떠한 숫자라도 '-'을 사용하면 0이되고, '/'를 사용하면 1이 된다. 때문에 '-'연산과 '/'연산을 사용하는 최대 횟수는 각 1번으로 제한을 두면 된다. 또한 연산 결과가 0과 1일때 발생할 수 있는 문제사항들을 if로 제거해주면 된다. 문제사항들은 다음과 같다. 1*1은 ..

백준 1713번 후보 추천하기 (C++)

문제 링크 : https://www.acmicpc.net/problem/1713 1713번: 후보 추천하기 첫째 줄에는 사진틀의 개수 N이 주어진다. (1≤N≤20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로 www.acmicpc.net 이 문제에서 기억해둬야할 점은 다음과 같다. 1. n은 앨범의 순서, m은 추천을 받는 횟수이다. 학생의 번호는 1번 ~ 100번까지 존재한다. 2. 문제에서 언급한 사항들을 반드시 모두 지켜야한다. 이 문제를 풀기 위해 필요한 변수와 로직은 다음과 같이 구현했다. 로직만 이해한다면 코드를 하나하나 설명하지 않아도 되므로, 구체적인 설명은 생략한다. [변수] 구조체 frame =..

백준 16931번 겉넓이 구하기 (C++)

문제 링크 : www.acmicpc.net/problem/16931 16931번: 겉넓이 구하기 크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어 www.acmicpc.net 간만에 옛날에 배웠던 수학 개념이 나왔다. 겉넓이란 말 그대로 대상의 모든 표면의 넓이를 의미한다. 예를들어 가로 세로 1cm의 정육면체 겉넓이는 6cm이다. 한 면의 넓이가 1이고 모두 6개의 면으로 이루어져있기 때문이다. 직육면체의 겉넓이는 다음과 같은 공식이다. 2 * (가로*세로 + 가로*높이 + 세로*높이) 문제 풀이는 간단하다. 한 좌표의 arr[y][x]의 겉넓이를 구하고..

백준 2290번 LCD Test (C++)

문제 링크 : www.acmicpc.net/problem/2290 2290번: LCD Test 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. www.acmicpc.net 문제 풀이는 다음과 같다. 1. 숫자 8을 LCD모니터에 출력해보자. 위의 그림과 같이, 숫자 8의 경우 0번째 ~ 6번째의 모든 자리들에 'ㅣ' 혹은 '-' 값이 출력된다. 2. 이를 기준으로 숫자 0~9까지의 모든 숫자들이 필요한 출력값들을 아래와 같이 저장해준다. int temp[10][7] = { {1,1,1,0,1,1,1}, //0 {0,0,1,0,0,1,0}, //1 {1,0,1,1,1,0,1}, ..

백준 15685번 드래곤커브 (C++)

문제 링크 : www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 이 문제에서 모든 지점의 값들을 매번 하나하나 저장해주고 그에 따른 회전값들을 매 순간 판단한다면 시간효율성이 비효율적일 것이다. 때문에 핵심적으로 회전방향만 저장해줄 것이다. 문제 풀이는 다음과 같다. 1. 먼저 이 문제의 규칙은 다음과 같다. 드래곤 커브에 대한 설명을 함축하자면, 이전 선분을 시계방향으로 90도 회전한 것을 마지막 지점에 그대로 가져다 붙이면 된다...

백준 14890번 경사로 (C++)

문제 링크 : www.acmicpc.net/problem/1489014890번: 경사로첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.www.acmicpc.net문제 풀이는 다음과 같다. 1. n과 l이외에 아래와 같이 변수들을 선언한다.이때 포인트는 가로열과 세로열의 방문 여부를 확인할 bool문형 배열이다.int arr[MAX][MAX],n,l, ans = 0; bool row[MAX][MAX], col[MAX][MAX], ch; // ch ? true : false = 다리 못넣는다 : 넣는다2. 배열의 값을 입력 받은 뒤 가로줄 먼저 판단을 진행한다. for(int i=1; i

백준 14503번 로봇 청소기 (C++)

문제 링크 : www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제 풀이는 다음과 같다. 1. 회전하는 순서대로 북 -> 동 -> 남 -> 서를 회전방향에 저장한다. my[] = {-1,0,1,0}, mx[] = {0,1,0,-1}, 2. 배열의 크기를 입력받고, 최대로 입력 가능한 크기 만큼의 int형 배열과 bool문형 배열을 선언한다. 3. 청소기의 위치와 방향을 입력 받는다. 이때 주의할 점이 맵이 0,0부터 시작한다는 점이다. 나는 계산을 편하게 ..

백준 14891번 톱니바퀴 (C++)

문제 링크 : www.acmicpc.net/problem/1489114891번: 톱니바퀴첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net푸는 방법은 여러가지가 있겠지만, 나는 톱니바퀴의 모든 값들을 회전시키는것이 아닌 정답에 영향을 주는 3가지 위치를 회전 시키는 방법을 선택했다. 위 사진의 맨 위(정답위치)는 첫 번째 자리(=1), 오른쪽은 두 번째 자리 (=3), 왼쪽은 세 번째 자리(=7)로 칭했다. 문제 풀이는 다음과 같다.1. 톱니바퀴의 값을 입력 받는다. 이때 주어지는 값은 숫자가 아닌 문자형이므로, 편의상 문자형을 숫..

백준 14499번 주사위 굴리기 (C++)

문제 링크 : www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 전형적인 시뮬레이션, 즉, 구현 문제이다. 문제를 잘 읽고 그대로 구현하면 되지만, 아래와 같은 유의사항들을 놓치면 쉽게 틀릴 수 있는 문제이다. 1. 좌표는 (x,y)로 표시한다. 2. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 3. 움직인 칸이 지도의 범위 밖일 경우, 움직이지 않고 아무것도 출력하지 않는다. 문제 풀이는 다음과 ..