분류 전체보기 38

[c++] 백준 1085번 직사각형에서 탈출

문제 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 x, y, w, h가 주어진다. 출력 첫째 줄에 문제의 정답을 출력한다. 문제풀이 x축을 먼저 보면 경계선까지 x, w-x 중에서 가장 작은 수가 최솟값이 되고 y축을 보면 y, h-y 중에서 가장 작은 수가 최솟값이 된다. 그 둘을 더한다. min 함수는 알고리즘헤더에 있다. #include #include int main(void){ int x, y, w, h; std:: cin >> x >> y >> w >> h; std:: cout

백준풀기 2024.01.31

[c++] 백준 1598번 꼬리를 무는 숫자 나열

문제 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그 녀석은 원주 부근을 돌아다니다가 코레스코 콘도에서 아주 재밌는 놀이를 발견했다. 그 놀이의 이름은 바로 “꼬리를 무는 숫자 나열”. 이제부터 원숭이가 그토록 좋아하던 그 놀이를 파헤쳐보자. 놀이의 방법은 간단하다. 일단 4줄짜리 표에 왼쪽부터 수를 아래로 1부터 순서대로 적어나간다. 다음에 그 예가 잘 나타나있다. (사진1) 이제 원숭이는 두 개의 자연수를 아무거나 생각한다. 그리고 숫자판에서 두 개의 자연수 사이의 직각거리를 구하면 된다. 여기서 직각거리는 동서방향거리와 남북방향거리의 합을 뜻한다. 예를 들어 저 숫자판에서 11과 33을 생각했다고 하자. 그렇다면 11과 33사이의 직각거리는 8이 된다.(동서방향거리 : 6, 남북방..

백준풀기 2024.01.31

[c++] 백준 1547번 공

문제 세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다. 먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다. 세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 컵의 위치를 바꾼 횟수 ..

백준풀기 2024.01.31

[c++] 백준 1837번 암호성공

문제 원룡이는 한 컴퓨터 보안 회사에서 일을 하고 있다. 그러던 도중, 원룡이는 YESWOA.COM 으로부터 홈페이지 유저들의 비밀키를 만들라는 지시를 받았다. 원룡이는 비밀 키를 다음과 같은 방법으로 만들었다. 개인마다 어떤 특정한 소수 p와 q를 주어 두 소수의 곱 pq를 비밀 키로 두었다. 이렇게 해 주면 두 소수 p,q를 알지 못하는 이상, 비밀 키를 알 수 없다는 장점을 가지고 있다. 하지만 원룡이는 한 가지 사실을 잊고 말았다. 최근 컴퓨터 기술이 발달함에 따라, 소수가 작은 경우에는 컴퓨터로 모든 경우의 수를 돌려보아 비밀 키를 쉽게 알 수 있다는 것이다. 원룡이는 주성조교님께 비밀 키를 제출하려던 바로 직전에 이 사실을 알아냈다. 그래서 두 소수 p, q 중 하나라도 K보다 작은 암호는 좋..

백준풀기 2024.01.30

[c++] 백준 10952번 A+B-5 (c++에선 a==b==c가 안되는 이유)

문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 입력의 마지막에는 0 두 개가 들어온다. 출력 각 테스트 케이스마다 A+B를 출력한다. 문제풀이 이 문제는 쉽다. 하지만 이 문제에 대해 글을 작성하는 이유는 c++에서 a==b==c가 왜 안되는지를 알아보기 위함이다. 안되는 이유는 c++에서 비교 연산자가 체이닝되지 않기 때문이다. 즉, a==b를 평가한 후 그 결과가 c와 비교되는 것이 아니라 a==b의 결과는 true or false이며 이 값이 c와 비교되지 않는다. 그러므로 a==b&&b==c와 같이 별도..

백준풀기 2024.01.30

[c++] 백준 9655번 돌게임 (동적프로그래밍)

문제 돌 게임은 두 명이서 즐기는 재밌는 게임이다. 탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다. 두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다. 입력 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000) 출력 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. 문제풀이 n이 짝수이면 창영이가 이기고 홀수이면 상근이가 이긴다. #include #include using namespace std; int main() { //직관에 의한 풀이 int n; cin >> n; if(n%2 == 0) cout

백준풀기 2024.01.30

[c++] cout과 printf의 차이

cout과 printf의 가장 큰 차이점은 cout은 컴파일러가 출력하려는 값의 자료형을 검사할 수 있다는 점이고 printf는 없다는 점이다. 그러므로 printf 사용시 버그가 발생할 확률이 높아진다. cout c++의 스트림 유형 객체 출력하려는 자료형을 컴파일러가 검사 가능 출력하려는 값의 형에 따라 적절한 함수 호 Printf c의 형식화된 문자열을 표시하는데 주로 사용되는 함수 출력하려는 자료형을 컴파일러가 검사 X -> 서식 문자열(%d, %f, %s 등등)을 일일이 외워야 함 cout보다 처리속도가 빠름 c++에서 printf가 왜 쓰이나 해서 찾아본 것인데 안정성면에서 cout을 사용하는게 더 좋다고 한다.

[c++] 백준 1269번 대칭 차집합

문제 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다. 입력 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200..

백준풀기 2024.01.30