대회 시작 시간이 굉장히 특이하길래(보통은 밤 11시 35분 정도에 시작하지만 이번 대회는 시작 시간이 오후 4시 5분이었다) 냉큼 참가했다.
대회 시작부터 문제를 풀었고, 30분정도 풀다가 일이 있어 그만두었다. 그리고 대회 끝나기 약 30분 정도 전에 들어와서 15분 정도 풀다 접었다.
총 1문제를 풀었는데, 결론적으로 보면 1문제, 그것도 A번에 45분을 쏟았다.
Div.2 한문제 푸는데 45분 걸리는 흑우
서론은 이쯤 하고, 풀이로 들어가자.

 

A. Prison Break

Problem Statement

There is a prison that can be represented as a rectangular matrix with n rows and m columns. Therefore, there are n⋅m prison cells. There are also n⋅m prisoners, one in each prison cell. Let's denote the cell in the i-th row and the j-th column as (i,j).

There's a secret tunnel in the cell (r,c), that the prisoners will use to escape! However, to avoid the risk of getting caught, they will escape at night.

Before the night, every prisoner is in his own cell. When night comes, they can start moving to adjacent cells. Formally, in one second, a prisoner located in cell (i,j) can move to cells (i−1,j) , (i+1,j) , (i,j−1) , or (i,j+1), as long as the target cell is inside the prison. They can also choose to stay in cell (i,j).

The prisoners want to know the minimum number of seconds needed so that every prisoner can arrive to cell (r,c) if they move optimally. Note that there can be any number of prisoners in the same cell at the same time.

 

Input

The first line contains an integer t (1t10^4), the number of test cases.

Each of the next t lines contains four space-separated integers n, m, r, c (1rn10^9, 1cm10^9).

 

Output

Print t lines, the answers for each test case.

 

풀이

모든 방 안에 죄수가 꽉 차 있고, 죄수는 움직이지 않을 수도 있으므로 문제에서 구하고자 하는 시간은 탈출구에서 가장 멀리 떨어져 있는 죄수가 탈출구로 이동하는 시간과 같다.

탈출구에서 가장 멀리 떨어져 있는 죄수는 항상 감옥의 4 꼭짓점(귀퉁이)에 있음을 알 수 있다.

따라서 4 귀퉁이에서 탈출구까지 가는 최단거리를 비교해서 가장 큰 값을 출력하면 된다.

 

#include<stdio.h>
int max(int a, int b){if(a>=b){return a;}else{return b;}}
int main()
{
    int a,b,c,d,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d %d %d",&a,&b,&c,&d);
        printf("%d\n",max(max(max(c+d-2,a-c+b-d),a-c+d-1),c-1+b-d));
    }
}

이걸 45분 고민했다

[00:12 Wrong Answer on pretest 1]

[00:14 Wrong Answer on pretest 2]

[00:16 Wrong Answer on pretest 2]

[00:51 Wrong Answer on pretest 2]

[01:00 Wrong Answer on pretest 1]

[01:12 Wrong Answer on pretest 2]

[01:34 Pretests passed, Accepted(9)]

 

 

 

이런 실수는 하지 말자.... ㅠㅠ

B번은 업솔빙 예정

'대회 후기 > Codeforces' 카테고리의 다른 글

SIT STAR Contest 2021 practice  (0) 2021.02.08
SIT Contest A, B, C, D Editorial  (0) 2021.02.08
Codeforces Round 690 (Div.3) 후기  (0) 2020.12.20
Codeforces Round #688 (Div. 2) 후기  (0) 2020.12.14
Codeforces Round #686 (Div.3) 후기  (0) 2020.11.25

안녕하세요?

오늘은 OJ 추천 2탄을 해보려고 합니다.

사실 지난번 OJ 추천 글에 있었던 OJ들 외에도 다양한 OJ들이 있습니다.

다른 OJ(해외 OJ 포함)을 정리해 보도록 하겠습니다!^^

 

 

1. Codeforces(통칭 코포)

이 채점 사이트는 굉장히 유명합니다.

외국 사이트라 한글이 없는 것이 단점입니다.

그런데 번역한다고 무작정 구글번역기를 돌리면 문제를 못풉니다;;

러시아어 지원되니까 영어 못하면 러시아어로 푸세요

그래서 조금 이해가 느리더라도 영어로 읽고 풀어야 합니다.

어짜피 ICPC등의 큰 대회는 문제 지문이 영어로 주어지므로 지문이 영어던 한국어던 문제를 빨리 풀 수 있는 능력이 필요하고, 이 능력을 키우기에 적합한 사이트입니다.

사실 이 사이트의 묘미는 문제를 푸는 것이 아니라 대회에 참가하는 것입니다.

1주에 적어도 2~3번은 대회가 열리고, 일반인도 참가할 수 있습니다.

대회는 Div 1, Div 2, Div 3로 나누어지는데 가입 직후에는 Div 2, Div 3밖에 참가를 못합니다.

대회에서 좋은 성적을 내어 아이디 색깔이 보라색이 되면 Div 1도 참가 가능합니다.

www.codeforces.com

 

Codeforces

 

codeforces.com

링크타고 들어가 보세용

 

 

2. Atcoder

이 사이트도 위에 소개해드린 사이트와 마찬가지로 영어로 문제를 풀어야 합니다.

일본어도 지원됩니당

이 사이트도 codeforces와 마찬가지로 대회에 초점이 맞춰져 있습니다.

1주에 1번정도 대회가 열리고, 일반인도 참가할 수 있습니다.

대회는 Atcoder Begginer contest, Atcoder Regular contest, Atcoder Grand contest 3개로 나뉩니다.(통칭 ABC, ARC, AGC 라고 부릅니다.)

ABC는 굉장히 쉽고, ARC는 코포 Div 2보다 약간 어렵고, AGC는 코포 Div 1보다 약간 쉬운 난이도를 가지고 있습니다.

그래봤자 저는 ABC문제도 다 못풉니다

www.atcoder.com

이 사이트입니다

 

 

3. Project Euler

신개념 코딩 사이트

이 사이트는 다른 사이트들과 굉장히 많이 다릅니다.

수학 문제가 주어지고, 굉장히 큰 수에 대한 답(노가다가 불가능한 정도)을 찾는 문제입니다.

이를 프로그래밍을 이용해서 답을 찾아내는 문제인데, 코드를 제출하는 것이 아닌 답을 써서 제출하는 방식입니다.

그런데 몇몇 문제는 걍 수식으로 풀려서(...) 계산 잠깐 하고 답 내서 맞는 경우도 있습니다.

한국 사이트와 영어 사이트가 있는데, 한국 사이트는 번역이 잘 되어있는 반면에 문제 수가 적고, 스코어보드가 없습니다.(저는 한국 사이트에서 활동중)

euler.synap.co.kr (한국사이트)

projecteuler.net (외국사이트)

 

 

4. Dovelet

요즘은 잘 쓰이지 않는(?) 사이트 같습니다.

일단 딱 사이트에 들어가자마자 느끼실텐데, 오래된 티가 팍팍 나고, 인터페이스가 (저한테는) 좀 불편합니다.

문제는 괜찮은 편인데, 돈을 내야 합니다.

무조건 돈을 내야 하는건 아니고, 1~30계단과 옥상 중 처음에는 준회원으로 1~3계단과 옥상의 문제만 풀 수 있습니다.

돈을 내면 정회원이 되어 4~30계단의 문제를 풀 수 있습니다.

돈을 내지 않고 4~30계단의 문제를 풀려면 엄청 문제를 많이 풀어서 전체순위 30등 이내로 들어가 쭈~욱 회원이 되는 방법이 있습니다.

www.dovelet.com

 

http://www.dovelet.com

 

www.dovelet.com

 

5. Algospot

최근에 알게 된 사이트입니다.

이 사이트의 커다란 특징으로는, 130문제만 풀어도 순위판 1페이지 진출입니다.

당연하게도, 쉬운 문제는(제 기준) 풀어본 결과 7개밖에 없습니다.(...)

www.algospot.com

 

algospot.com :: 알고스팟에 오신 것을 환영합니다!

 

www.algospot.com

 

 

여기까지입니다.

감사합니다!^^

 

'C언어 공부' 카테고리의 다른 글

중첩 for문  (0) 2020.11.26
OJ 추천  (1) 2020.03.28
C 언어 연습 IDE 추천  (4) 2020.03.27
배열  (1) 2020.03.26
반복문  (0) 2020.03.26

오랜만에 C언어 강의글을 올리는 것 같다.

오늘은 예~전에 예고했던 대로 중첩 for문에 대해서 배워 보려고 한다.

 

중첩 for문이란?

 

중첩의 사전적 의미는 거듭 겹치거나 겹쳐지는 것이다.

따라서 중첩 for문은 계속 겹쳐서 for문을 작성하는 것을 말한다.

아래 코드를 보자.

 

#include <stdio.h>
int main(){    
    int a=0,i,j;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            a++;
        }
    }
    printf(“%d\n”,&a);
    return 0;
}

 

이 코드를 실행시키면 출력값은 얼마일까?

이 코드에서 0부터 9까지 반복되는 for문이 2번 겹쳐져 있다.

그러면 i=0, j=0부터 i=9, j=9까지 반복이 되므로 총 반복 횟수는 100번이다.

따라서 실행값은 100이 된다.

 

이렇게 중첩 for문을 이용하면 10번을 반복하는 for문을 10번 쓸 필요 없이 2개의 for문만으로도 충분히 a0에서 100까지 증가시킬 수 있다.

 

그런데 혹자는 이렇게 물어볼 수도 있을 것이다.

‘for문 안에서 i0에서 100까지 돌리면 for1개로도 되지 않나요?’

이 코드에서는 그렇긴 하다.

하지만 문제를 풀다 보면 무조건 for2개가 필요한 문제가 있을 것이다.

그 문제들은 바로 별 찍기문제들이다.

코드업의 1352번 문제부터 1371번 문제까지 풀어보면 좋을 것 같다.

그럼 이렇게 강의를 마치겠다.

 

빠이~~

'C언어 공부' 카테고리의 다른 글

OJ 추천 (2)  (3) 2020.11.27
OJ 추천  (1) 2020.03.28
C 언어 연습 IDE 추천  (4) 2020.03.27
배열  (1) 2020.03.26
반복문  (0) 2020.03.26

+ Recent posts