250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- englishbook
- sw expert academy
- 원서
- 원서읽자
- MySQL
- 코테 준비
- the midnight library
- sw expert
- readingbook
- 백준
- English
- 알고리즘
- BFS
- PyQt
- 코테
- SQL
- 완전탐색
- 프로그래머스
- nightroutine
- 직무면접
- 코딩테스트
- D4
- 코테 대비
- 삼성
- STUDYENGLISH
- 쉬운 알고리즘 문제
- dfs
- 원서읽기
- swexpertacademy
- 알고리즘 문제
Archives
- Today
- Total
시나브로
8568. 3으로 나눈 순열 본문
728x90
아무리해도 논리가 맞아서 왜 안되지하다가 i가 j로 잘못적힌거 발견했다....
다음부터는 이런 실수하지 않길...
먼저 순열을 받으면서 각 숫자에 대한 %3의 값을 저장하고
0번부터 자리값과 숫자값이 맞는 지 확인한다.
틀리다면, 그 이후로 swap해서 2개의 숫자가 제자리에 갈수 있도록하는 자리를 찾고, 없을 때를 대비하여 제자리에 있지 않고 현재자리의 값을 가지고 있는 숫자를 저장하여 swap한다.
#include<stdio.h>
void swap(int list1[], int list2[]) {
int temp[2] = { list1[0],list1[1] };
list1[0] = list2[0];
list1[1] = list2[1];
list2[0] = temp[0];
list2[1] = temp[1];
}
int main(void) {
freopen("inp.inp", "r", stdin);
freopen("out.out", "w", stdout);
int ts = 0;
scanf("%d", &ts);
for (int q = 0; q < ts; q++) {
int amount = 0;
scanf("%d", &amount);
int count = 0;
int list[1000][2] = { 0 };
for (int p = 0; p < amount; p++) {
scanf("%d", &list[p][0]);
list[p][1] = list[p][0] % 3;
}
int point = 0;
for (int i = 0; i < amount; i++) {
++point %= 3;
if (point == list[i][1])
continue;
int sig = 0;
int before = 0;
for (int j = i+1; j < amount; j++) {
if (list[j][1] == point&&list[i][1] == (j+1) % 3) {
count++;
swap(list[i], list[j]);
sig = 1;
break;
}
if (list[j][1] == point&&list[j][1] != (j + 1) % 3)
before = j;
}
if (sig != 1) {
count++;
swap(list[i], list[before]);
}
}
printf("#%d %d\n", q + 1, count);
}
return 0;
}
728x90
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
[D3] 9317. 석찬이의 받아쓰기 (0) | 2020.03.08 |
---|---|
8567. 약수의 개수가 많은 수 (0) | 2020.01.07 |
9088. 다이아몬드 (0) | 2020.01.06 |
8993. 하지 추측 (0) | 2020.01.06 |
[D4] 7465. 창용 마을 무리의 개수 (0) | 2019.10.12 |
Comments