kimmandoo๐ŸฅŸ (165)

๋ฐ˜์‘ํ˜•
02
23

kotlin
์ ‘๊ธฐ
@Immutable
data class LoginState(
val id: String = "",
val password: String = "",
)

์ปดํฌ์ฆˆ๋กœ ๊ฐœ๋ฐœ ์ค‘์ธ๋ฐ, ์ด์ „ UiState์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ์“ฐ๋Š” data class์— @Immutable ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ๋ ๊นŒ?

 

@Immutable์€ ๊ฐ์ฒด๊ฐ€ ๋ถˆ๋ณ€(Immutable)์ž„์„ ๋ช…์‹œํ•˜์—ฌ, ๋‚ด๋ถ€ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ผ์ด ์—†๋‹ค๊ณ  Compose์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.  ํ•˜์ง€๋งŒ, @Immutable์ด ๋ถ™์–ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋ฆฌ์ปดํฌ์ง€์…˜์„ "์ ˆ๋Œ€ ์•ˆ ํ•˜๋Š” ๊ฒƒ"์ด ์•„๋‹ˆ๋ผ, ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์ปดํฌ์ง€์…˜์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

@Stable์€ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ, Compose๊ฐ€ ๋‚ด๋ถ€ ํ•„๋“œ ๋ณ€ํ™”๊นŒ์ง€ ์ถ”์  ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
์ฆ‰, @Stable์ด ๋ถ™์–ด ์žˆ๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ฆฌ์ปดํฌ์ง€์…˜์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ, ๊ฐ์ฒด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์ปดํฌ์ง€์…˜์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ข€ ๋” ์ž์„ธํžˆ ๋ณด๊ฒ ๋‹ค.

kotlin
์ ‘๊ธฐ
@Composable
fun UserProfile(user: User) {
/* body */
}

์ปดํฌ์ €๋ธ”ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ, ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์ปดํฌ์ง€์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ด ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” user์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€์•Š๋Š” ํ•œ UserProfile์ด ๋ฆฌ์ปดํฌ์ง€์…˜ ๋˜์ง€์•Š๋Š”๋‹ค.(๋ณด๊ณ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ user ํ•˜๋‚˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ)

 

kotlin
์ ‘๊ธฐ
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text("Count: $count")
}
}

์ปดํฌ์ฆˆ์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํƒœ๋ผ๊ณ  ๋ณดํ†ต ์–˜๊ธฐํ•˜๋Š”๋ฐ, by remember { mutableStateOf(T) }๋กœ ์„ ์–ธํ•ด์„œ ์ผ์„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ var ๊ฐ์ฒด๋กœ ์„ ์–ธ๋œ ๊ฑด ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ณ , ๋งŒ์•ฝ ์ด๊ฒŒ count๋ผ๊ณ  ํ–ˆ์„ ๋•Œ count ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ด๊ฑธ ๋ณด๊ณ ์žˆ๋˜ ์ปดํฌ์ €๋ธ”์€ ๋ฆฌ์ปดํฌ์ง€์…˜๋œ๋‹ค.

mermaid
์ ‘๊ธฐ
์ƒํƒœ_๋ณ€๊ฒฝ_๊ฐ์ง€
Yes
No
์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€_์„ ํƒ์ ์œผ๋กœ_์žฌ๊ตฌ์„ฑ
๋‹ค์‹œ_๋ Œ๋”๋งํ•œ๋‹ค
์ƒํƒœ๋ณ€ํ™”
๋ฆฌ์ปดํฌ์ง€์…˜_ํ•„์š”_์—ฌ๋ถ€_ํŒ๋‹จ
๋ฆฌ์ปดํฌ์ง€์…˜์ด_ํ•„์š”ํ•˜๋ฉด
๋ฆฌ์ปดํฌ์ง€์…˜์ด_ํ•„์š”์—†์Œ
์žฌ๊ตฌ์„ฑ๋œ_Composable๋“ค
UI_๋‹ค์‹œ_๊ทธ๋ฆผ

 

๋ฆฌ์ปดํฌ์ง€์…˜์€ UI ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ UI๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”์™€๋„ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ๋‹ค. ์ฆ‰ ์•„๋ž˜์ฒ˜๋Ÿผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

  • ์ƒํƒœ ๋ณ€ํ™”๋Š” UI ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋ฉฐ, Compose์—์„œ ์ž๋™ ๊ฐ์ง€
  • ๋ฆฌ์ปดํฌ์ง€์…˜์€ ์‹ค์ œ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ Composable์„ ์žฌํ˜ธ์ถœํ•˜์—ฌ UI๋ฅผ ๊ฐฑ์‹ 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT
 
02
09

 

https://www.acmicpc.net/problem/31418

 

BFS๋กœ ์ฒ˜์Œ์— ์ ‘๊ทผํ–ˆ์œผ๋‚˜, W, H, T๊ฐ€ ์ตœ๋Œ€ 10^6์ธ๊ฑธ ํ™•์ธํ•˜๊ณ  ์™„์ „ํƒ์ƒ‰์ด ์•„๋‹Œ ๊ฑธ ์•Œ์•˜๋‹ค... 


ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ •

java
์ ‘๊ธฐ
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static long w, h, k, t;
static int[] di = {-1, -1, 0, 1, 1, 1, 0, -1};
static int[] dj = {0, 1, 1, 1, 0, -1, -1, -1};
static long mod = 998244353;
static long ans;
public static void main(String[] args) throws IOException {
// System.setIn(new FileInputStream("res/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
w = Long.parseLong(st.nextToken());
h = Long.parseLong(st.nextToken());
k = Long.parseLong(st.nextToken());
t = Long.parseLong(st.nextToken());
ans = 1;
for (int i = 1; i <= k; i++) {
st = new StringTokenizer(br.readLine(), " ");
// i๋ฒˆ์งธ ๋ฐ”์ด๋Ÿฌ์Šค ์œ„์น˜
long x = Long.parseLong(st.nextToken());
long y = Long.parseLong(st.nextToken());
go(x, y);
}
System.out.println(ans);
}
public static void go(long x, long y) {
long wCase = Math.min(w, x + t) - Math.max(1, x - t) + 1;
long hCase = Math.min(h, y + t) - Math.max(1, y - t) + 1;
ans = (ans * wCase) % mod;
ans = (ans * hCase) % mod;
}
}

๋ง์ด ์ข€ ์–ด๋ ต๋‹ค.

๋Œ€๊ฐ์„ ๋„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, t์ดˆ์ผ ๋•Œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋Š” ์ •์‚ฌ๊ฐํ˜•์ด ๋œ๋‹ค. ๋˜ํ•œ ๊ฐ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ด๋™ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๊ฐ๊ฐ ๊ณฑํ•ด๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค.

 

์ด๋™ ๋ฒ”์œ„๊ฐ€ ๊ณง ์ด๋™ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋˜๋ฏ€๋กœ, ๊ฐ€๋กœ์™€ ์„ธ๋กœ ์ด๋™๋ฒ”์œ„๋ฅผ ์‚ฌ๊ฐํ˜• ํ˜•ํƒœ๋กœ ๊ณฑํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ€๋กœ ์ด๋™๋ฒ”์œ„๋Š” [max(1,xโˆ’T),min(W,x+T)](์™ผ์ชฝ๋์—์„œ ์˜ค๋ฅธ์ชฝ ๋๊นŒ์ง€) ์„ธ๋กœ ์ด๋™๋ฒ”์œ„๋Š” [max(1,yโˆ’T),min(H,y+T)] (๋งจ ์œ„์—์„œ ๋งจ ์•„๋ž˜๊นŒ์ง€) ๋‹ค.

 

์ด ๋‘ ์ด๋™๋ฒ”์œ„๋ฅผ ๊ณฑํ•˜๋ฉด ํ•ด๋‹น ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ์ฝ์—ˆ์„ ๋•Œ ๋ถ„ํฌ์˜ ๊ฐœ๋…์ด ์ด๊ฑฐ๋ผ๋Š” ๊ฒŒ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜์ง€์•Š์•„ ๋” ์–ด๋ ค์› ๋‹ค.

 

max, min์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” W, H๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ํ•ด์•ผ๋˜๋‹ˆ๊นŒ ์œ ํšจ์„ฑ ์ฒดํฌ ๊ฐœ๋…์œผ๋กœ ๋„ฃ์–ด๋’€๋‹ค.

 

ans์—๋Š” ๋ˆ„์ ๊ณฑ์„ ํ•ด์•ผ๋˜๋Š”๋ฐ, ๋ฌธ์ œ์—์„œ mod ๊ฐ’์„ ์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ๊ณฑํ•  ๋•Œ๋งˆ๋‹ค mod๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

์ด๊ฒŒ ์กฐํ•ฉ์ธ ๊ฑธ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์•„์˜ˆ ๋ชปํ’€์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT
 
01
08

โ–ถ ์œ ํ˜•

  • ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ(Manhattan Distance)๋Š” ๋„์‹œ ๋ธ”๋ก์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ˆ˜ํ•™์—์„œ์˜ ๊ฑฐ๋ฆฌ ๊ณต์‹์ด๋ž‘์€ ๋‹ค๋ฅธ๋ฐ, |x1 - x2| + |y1 - y2| ๋กœ ๋‘ ์  ์‚ฌ์ด์˜ x์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’๊ณผ y์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’์˜ ํ•ฉ์„ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ฆ‰ ๊ฒฉ์žํ˜• ๊ตฌ์กฐ์—์„œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์ขŒํ‘œํ‰๋ฉด์ด๋‚˜ ๋Œ€๊ฐ์„ ์„ ๊ณ ๋ คํ•˜์ง€์•Š๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ ์ˆ˜์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทผ๋ฐ ์ด๊ฑธ ์—ฌ๋Ÿฌ ์ ๋“ค ์‚ฌ์ด์—์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์†Œ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์ค‘์•™๊ฐ’์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

โ–ถ ์ „๋žต

1์ฐจ์›, 2์ฐจ์›์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๊ฒ ๋‹ค.

 

1์ฐจ์›์—์„œ ์—ฌ๋Ÿฌ ์ ๋“ค๋กœ๋ถ€ํ„ฐ์˜ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ ์ด ์ค‘์•™๊ฐ’์ธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž.

์ˆ˜ํ‰์„ ์— n๊ฐœ์˜ ์  xโ‚, xโ‚‚, ..., xโ‚™์ด ์žˆ์„ ๋•Œ, ๊ฑฐ๋ฆฌ ํ•ฉ์„ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด 

  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ์ž‘์œผ๋ฉด: -1 ๊ธฐ์—ฌ
  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ํฌ๋ฉด: +1 ๊ธฐ์—ฌ

๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ตœ์ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์ค€ ์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์€ ์ ๋“ค์˜ ๊ฐœ์ˆ˜, ํฐ ์ ๋“ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ง€์ ์— ๋†”์•ผํ•˜๋Š”๋ฐ, ์ด ๋ง์€ ๊ณง ์ค‘์•™๊ฐ’์ด๋ผ๋Š” ์–˜๊ธฐ๊ฐ€๋œ๋‹ค.

 

๋‹ค์‹œ ๋งํ•˜์ž๋ฉด, ์ˆ˜ํ‰์„ ์—์„œ

์ค‘์•™๊ฐ’์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ณ 
์ค‘์•™๊ฐ’์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™: ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ค‘์•™๊ฐ’์ด ์ด ๋•Œ ์ตœ์ ์ ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

 

๊ทธ๋Ÿผ 2์ฐจ์›์œผ๋กœ ๊ฐ€๋ณด์ž

2์ฐจ์›์€ ์ˆ˜ํ‰์„ ์ด ๋‹จ์ˆœํžˆ 2๊ฐœ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ณง x์ถ•๊ณผ y์ถ•์ด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ 1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์ ์  ์ฐพ๋“ฏ ํ•˜๋ฉด ๋œ๋‹ค.

 

์ฆ‰ x์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’๊ณผ y์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’์ด ๋งŒ๋‚˜๋Š” ์ ์ด ์ „์ฒด ์ตœ์ ํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐ”๋กœ ๋ฌธ์ œ ํ’€์–ด๋ณด์ž.

 

https://www.acmicpc.net/problem/18310

1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ ์ตœ์ ์ ์„ ์ฐพ๋Š” ๋ฌธ์ œ๋‹ค.

 

๋‚œ ์ฒ˜์Œ์— ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

java
์ ‘๊ธฐ
public static void go() {
int[] target = new int[n];
for (int i = 0; i < n; i++) {
target[i] = point[i];
}
Arrays.sort(target);
int min = Integer.MAX_VALUE;
int minT = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int center = (target[j] + point[i]) / 2;
int dist = 0;
for (int k = 0; k < n; k++) {
int d = Math.abs(point[k] - center);
dist += d;
}
if (min > dist) {
min = dist;
minT = center;
}
// System.out.println("dist: " + dist + " minT: " + minT + " center: " + center);
// System.out.println();
}
}
}

์ง„์งœ ์™„์ „ํƒ์ƒ‰ ๋ฐฉ์‹์œผ๋กœ ํ‘ผ๊ฑด๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณด๋‹ค์‹œํ”ผ O(n^3)์ด๋‹ค.

n์ด 20๋งŒ์ด๋ผ ์ ˆ๋Œ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

์ˆ˜ํ‰์„  ์ตœ์ ์ ์„ ์ƒ๊ฐํ•˜๋ฉฐ ๋‹ค์‹œ ํ’€๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์งง์€ ํ’€์ด๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

java
์ ‘๊ธฐ
public static void go() {
Arrays.sort(point);
System.out.println(point[(n - 1) / 2]);
}

 

์ด๊ฑธ 2์ฐจ์›์œผ๋กœ ๋“ค๊ณ  ๊ฐ€๋ฉด ์•„๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

https://www.acmicpc.net/problem/1090

์ฒ˜์Œ์— ์ค‘์•™๊ฐ’์ด ํ•ญ์ƒ ์ตœ์ ์ธ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ณ , ์ฃผ์–ด์ง„ ์ ์„ ํ™œ์šฉํ•ด์„œ ๊ฑฐ๋ฆฌํ•ฉ์„ ๊ตฌํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ์—์„œ 0 2 4 6์ด ๋‚˜์˜ค๋ฉฐ ํ‹€๋ฆฐ ๋‹ต๋งŒ ๋‚ด๋†“๋Š”๋‹ค.

 

๊ทธ๋ž˜์„œ x ์ถ•, y ์ถ•์„ ๋ถ„๋ฆฌํ•ด ๊ฐ ์ขŒํ‘œ๋ฅผ ๋–ผ์–ด๋‚ด์–ด ์กฐํ•ฉํ•ด์•ผ๋œ๋‹ค.

์ฒ˜์Œ ์ž‘์„ฑํ•  ๋•Œ ์ค‘์•™๊ฐ’ ๋น„๊ต๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณ„์† ํ‹€๋ ธ๋‹ค.

java
์ ‘๊ธฐ
public static void go() {
for (int k = 1; k <= n; k++) {
// k์ผ๋•Œ ์ตœ์†Œ๊ฑฐ๋ฆฌํ•ฉ
int res = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int centerX = checker[i][0]; // ์› ๋Œ€์ƒ์˜ X
int centerY = checker[j][1]; // ๋น„๊ต ๋Œ€์ƒ์˜ Y
int[] dist = new int[n];
for (int p = 0; p < n; p++) {
dist[p] = Math.abs(checker[p][0] - centerX) + Math.abs(checker[p][1] - centerY);
}
// System.out.println(Arrays.toString(dist));
Arrays.sort(dist);
int sum = 0;
for (int d = 0; d < k; d++) {
sum += dist[d];
}
res = Math.min(res, sum);
}
}
sb.append(res).append(" ");
}
}

์›๋Œ€์ƒ์˜ X์ขŒํ‘œ, ๋น„๊ต ๋Œ€์ƒ์˜ Y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉฐ k ๋งŒํผ์˜ ํ•ฉ์„ ๊ณ„์† ๋งŒ๋“ค์–ด๊ฐ€๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค. ๋‚˜๋Š” ๋‚œ์ด๋„๋ฅผ ๋ชจ๋‘ ๊ฐ€๋ฆฌ๊ณ  ํ’€๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒŒ ํ”Œ๋ ˆ๋ผ๋Š” ๊ฑธ ์•Œ๊ณ  ์ข€ ๋†€๋ž๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT
 
01
07

โ–ถ ์œ ํ˜•

  • ๋ชจ๋…ธํ†ค ์Šคํƒ์€ ์Šคํƒ์˜ ์š”์†Œ๋“ค์ด ํ•ญ์ƒ ๋‹จ์กฐ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‹จ์กฐ ๊ฐ์†Œํ•˜๋„๋ก ์œ ์ง€๋˜๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์กฐ ์Šคํƒ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๋ชจ๋…ธํ†ค ์Šคํƒ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํŠน์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง„ ๋‹ค์Œ/์ด์ „ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋ฅผ ์„ ํ˜• ์‹œ๊ฐ„์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ธ๋ฐ, ๊ฐ ์›์†Œ๋Š” ์ตœ๋Œ€ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์Šคํƒ์— ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์ด ๋  ์ฝ”๋“œ๊ฐ€ O(n)์œผ๋กœ ์œ ์ง€๋œ๋‹ค., ์ด๊ฒŒ ์—„์ฒญ ํฐ ์žฅ์ ์ด๋‹ค.
  • ๋ฐฐ์—ด์—์„œ ๊ฐ ์›์†Œ์˜ ๋‹ค์Œ์œผ๋กœ ํฐ ์ˆ˜ ์ฐพ๊ธฐ, ํžˆ์Šคํ† ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜• ๋„“์ด ๊ตฌํ•˜๊ธฐ, ์˜จ๋„๊ฐ€ ๋” ๋†’์•„์ง€๋Š” ๋‚ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ผ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ ๊ฐ™์€ ์œ ํ˜•์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
mermaid
์ ‘๊ธฐ
Yes
No
Yes
No
์กฐ๊ฑด ์œ„๋ฐฐ
์กฐ๊ฑด ๋งŒ์กฑ
์‹œ์ž‘
์Šคํƒ ์ดˆ๊ธฐํ™”
์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€
์žˆ๋Š”๊ฐ€?
์Šคํƒ์ด
๋น„์–ด์žˆ๋Š”๊ฐ€?
์ข…๋ฃŒ
์Šคํƒ์— ์›์†Œ ์ถ”๊ฐ€
์Šคํƒ top๊ณผ ๋น„๊ต
์Šคํƒ์—์„œ
top ์›์†Œ ์ œ๊ฑฐ
์ œ๊ฑฐ๋œ ์›์†Œ๋กœ
๊ฒฐ๊ณผ๊ฐ’ ๊ณ„์‚ฐ

โ–ถ ์ „๋žต

์˜ค๋ฆ„์ฐจ์ˆœ์ด๋ฉด ๋“ค์–ด๊ฐ€๋ ค๋Š” ์ˆ˜๊ฐ€ top ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ pop์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ฉด ๋“ค์–ด๊ฐ€๋ ค๋Š” ์ˆ˜๊ฐ€ top ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ pop์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ตฌํ˜„๋œ๋‹ค.

[2, 1, 4, 3, 5]๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

๋จผ์ € 2๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๊ทธ ๋‹ค์Œ 1์ด ๋“ค์–ด์˜ค๋Š”๋ฐ, 1์€ 2๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ 2๋ฅผ popํ•˜๊ณ  1์„ pushํ•œ๋‹ค. push ์ „์— top๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ํ•ต์‹ฌ์ด๋‹ค.

 

4๋Š” 1๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ pushํ•˜๊ณ , 3์ด ๋“ค์–ด์™€์•ผ๋˜๋Š”๋ฐ 3์€ 4๋ณด๋‹ค ์ž‘์œผ๋‹ˆ๊นŒ 4์„ pop ํ•˜๊ณ  3์„ pushํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ž…๋ ฅ ๋ฐฐ์—ด์ด [2, 3, 5, 1] ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

5๊นŒ์ง€ ๋‹ด์•˜์„ ๋•Œ 1๊ณผ ๋น„๊ตํ•˜๋ฉด 5๊ฐ€ pop๋˜์•ผํ•œ๋‹ค. ์—ฌ์ „ํžˆ top์ด 1๋ณด๋‹ค ํฌ๋ฏ€๋กœ 3๋„ pop, 2๋„ popํ•˜๋ฉด ์Šคํƒ์ด ๋นˆ ์ƒํƒœ๋กœ 1์ด push ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰ ์Šคํƒ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ธฐ ์ „์— k ์ด์ƒ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  k๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

 

https://www.acmicpc.net/problem/1725

์–˜๋ฅผ ํ•œ๋ฒˆ ํ’€์–ด๋ณด์ž.

java
์ ‘๊ธฐ
for (int i = 1; i <= n; i++) {
// ํ˜„์žฌ ๋ง‰๋Œ€(arr[i])๋ณด๋‹ค ํฐ ๋†’์ด์˜ ๋ง‰๋Œ€๋“ค์„ ์ฒ˜๋ฆฌ
while (!st1.isEmpty()) {
if (st1.peek() > arr[i]) {
long nowVal = st1.pop(); // ํ˜„์žฌ ์ฒ˜๋ฆฌํ•  ๋†’์ด
st2.pop(); // ํ•ด๋‹น ๋†’์ด์˜ ์œ„์น˜๋„ ํ•จ๊ป˜ ์ œ๊ฑฐ
// ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ๊ฒฝ๊ณ„ ์ฐพ๊ธฐ
int leftIdx = -1;
if (st2.isEmpty())
leftIdx = 1; // ์Šคํƒ์ด ๋น„์—ˆ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ
else
leftIdx = st2.peek() + 1; // ์ด์ „ ๋ง‰๋Œ€ ๋‹ค์Œ ์œ„์น˜๋ถ€ํ„ฐ
// ์ง์‚ฌ๊ฐํ˜•์˜ ์˜ค๋ฅธ์ชฝ ๊ฒฝ๊ณ„๋Š” ํ˜„์žฌ ์œ„์น˜ ์ง์ „๊นŒ์ง€
int rightIdx = i - 1;
// ๋„“์ด ๊ณ„์‚ฐ
long width = rightIdx - leftIdx + 1;
long area = width * nowVal;
max = Math.max(max, area);
} else {
break; // ํ˜„์žฌ ๋ง‰๋Œ€๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋†’์ด๋ฅผ ๋งŒ๋‚˜๋ฉด ์ค‘๋‹จ
}
}
// ํ˜„์žฌ ๋ง‰๋Œ€์˜ ์ •๋ณด๋ฅผ ์Šคํƒ์— ์ถ”๊ฐ€
st1.push(arr[i]);
st2.push(i);
}

๋ฉ”์ธ ๋กœ์ง์ด๋‹ค.

์ž…๋ ฅ ๊ฐ’๊ณผ top์„ ๋น„๊ตํ•˜๋Š”๋ฐ, top์ด ๋” ํฌ๋ฉด popํ•˜๊ณ , idx๋ฅผ ๋“ค๊ณ ์žˆ๋˜ ์Šคํƒ๋„ popํ•œ๋‹ค.(๋™๊ธฐํ™”)

์ง€๊ธˆ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ์ง์‚ฌ๊ฐํ˜•์˜ ๋†’์ด๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ธ๋ฑ์Šค์˜ ์ฐจ์ด๋งŒํผ์ด ๋„ˆ๋น„๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ pop๋˜๋Š” ์‹œ์ ์˜ ๋ฐ”๋กœ ์ด์ „ ์ธ๋ฑ์Šค๊ฐ€ top์ด ์œ ์ง€๋˜๊ณ ์žˆ๋Š” ์ธ๋ฑ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฑธ ๋„ˆ๋น„๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋๋‚œ๋‹ค. ๋ฌผ๋ก  ์ด ์ž‘์—… ํ›„์—, ์•„์ง ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์„ ๋น„์›Œ์ฃผ๋Š” ์ž‘์—…๋„ ํ•„์ˆ˜๋‹ค. ๊ทผ๋ฐ ์ด๋ฏธ ํƒ์ƒ‰์„ ๋ชจ๋‘ ํ•œ ์‹œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฅธ์ชฝ ๋์„ n์œผ๋กœ ์žก๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.

java
์ ‘๊ธฐ
// ๋‚จ์€ ์Šคํƒ ์ •๋ฆฌ
while (!st1.isEmpty()) {
Long nowVal = st1.pop();
st2.pop();
int rightIdx = n; // ์˜ค๋ฅธ์ชฝ ๋
int leftIdx = -1;
if (st2.isEmpty()) {
leftIdx = 1;
} else {
leftIdx = st2.peek() + 1;
}
long width = rightIdx - leftIdx + 1;
long area = width * nowVal;
max = Math.max(max, area);
}

 

์ด ๋ฌธ์ œ๋Š” ๋‹จ์กฐ ์ฆ๊ฐ€๋กœ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ์—์„œ ๋‹จ์กฐ ์ฆ๊ฐ€, ๊ฐ์†Œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋‹จ์กฐ์ฆ๊ฐ€์™€ ๋‹จ์กฐ๊ฐ์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•ต์‹ฌ์€ "์š”๊ตฌ์‚ฌํ•ญ"์— ๋‹ฌ๋ ค์žˆ๋‹ค.
๋จผ์ € ๊ฒฐ๊ณผ๊ฐ’์˜ ์กฐ๊ฑด์„ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค. ์ฐพ๋Š” ๊ฐ’์ด "๋” ํฐ ์ˆ˜"์ธ์ง€ "๋” ์ž‘์€ ์ˆ˜" ์ธ์ง€ ๊ตฌ๋ถ„ํ•ด์•ผ๋œ๋‹ค.

  • "๋” ํฐ ์ˆ˜"๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ โ†’ ๋‹จ์กฐ๊ฐ์†Œ ์Šคํƒ ์œ ์ง€
  • "๋” ์ž‘์€ ์ˆ˜"๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ โ†’ ๋‹จ์กฐ์ฆ๊ฐ€ ์Šคํƒ ์œ ์ง€

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ,

https://www.acmicpc.net/problem/2493 
ํƒ‘ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด, ์ด์ „ ์Šคํƒ์— ๋” ํฐ ์ˆ˜๊ฐ€ ์ˆ˜์‹  ๊ธฐ๋‘ฅ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์กฐ๊ฐ์†Œ ์Šคํƒ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

java
์ ‘๊ธฐ
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static int[] input;
public static ArrayDeque<Integer> stack;
public static ArrayDeque<Integer> idx; // idx
public static int n;
public static int[] res;
public static void main(String[] args) throws Exception {
// System.setIn(new FileInputStream("res/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
input = new int[n + 1];
res = new int[n + 1]; // idx ๋ฒˆ ๊ธฐ๋‘ฅ์ด ์ˆ˜์‹ ํ–ˆ์Œ์„ ๊ธฐ๋กํ•˜๋ ค๊ณ 
// idx ๊ณ„์‚ฐ 1๋ถ€ํ„ฐ
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 1; i <= n; i++) {
input[i] = Integer.parseInt(st.nextToken());
}
// ์ž…๋ ฅ ๋
stack = new ArrayDeque<>();
idx = new ArrayDeque<>();
go();
for (int i=1; i<=n; i++){
sb.append(res[i]).append(" ");
}
System.out.println(sb);
}
public static void go() {
for (int i = 1; i <= n; i++) {
// ๋‹จ์กฐ ๊ฐ์†Œ ์Šคํƒ์œผ๋กœ ๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
int now = input[i];
while (!stack.isEmpty()) {
if (stack.peek() < now) { // top์ด ๋” ์ž‘์œผ๋ฉด ๋นผ์•ผ๋œ๋‹ค
stack.pop();
idx.pop();
} else {
// ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ˆ˜์‹ ํ•œ ๊ฒƒ
res[i] = idx.peek();
break;
}
}
stack.push(now);
idx.push(i);
}
}
}

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!
๋ฐ˜์‘ํ˜•
COMMENT