π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.3273 λ μμ ν© νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/3273
nκ°μ μλ‘ λ€λ₯Έ μμ μ μ a1, a2, β¦, anμΌλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ μλ€. aiμ κ°μ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 1000000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μμ°μ xκ° μ£Όμ΄μ‘μ λ, ai + aj = x (1 β€ i < j β€ n)μ λ§μ‘±νλ (ai, aj)μμ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π μ κ·Όλ²
Q.3273 λ μμ ν© λ¬Έμ μ λλ€.
nκ°μ μλ‘ λ€λ₯Έ μμ μ μλ€λ‘ μ΄λ€μ§ μμ΄μ΄ μμ λ
ai + aj = x (1 β€ i < j β€ n)μ λ§μ‘±νλ (ai, aj)μμ μλ₯Ό ꡬνλ λ¬Έμ μ λλ€.
μ€μ§ λκ°μ μλ§μ κ³¨λΌ xκ°κ³Ό κ°μ κ²½μ°κ° λͺκ°μΈ μ§λ₯Ό ꡬνλ λ¬Έμ μ λλ€.
ν¬ ν¬μΈν° λ°©μμΌλ‘ νμ΄κ° κ°λ₯ν©λλ€.
μ°μ μμ΄μ μ λ ¬μ ν΄μ£Όκ³
μμμ = 0, λμ = n - 1 λΆν° κ°κ° μμν΄ μμμ κ³Ό λμ μ΄ κ°μμ§κΈ° μ κΉμ§!
μμμ κ³Ό λμ μ μμλ₯Ό λν©λλ€.
ν΄λΉ ν©μ΄ xμ κ°λ€λ©΄ countλ₯Ό λλ €μ£Όκ³ start λ₯Ό λλ €μ£Όκ³ endλ μ€μ¬μ€λλ€.
μ£Όμ΄μ§ nκ°μ μ μκ° λͺ¨λ μλ‘ λ€λ₯Έ μμ μ μμ΄λ―λ‘
κ° μλ§λ€ νκ°μ μμ κ°μ§ μ λ°μ μκΈ° λλ¬Έμ λλ€.
ex) 1,2,3,4,5 κ° μ£Όμ΄μ§κ³ x=5 μΌ λ
1μ μ§μ μ€μ§ 4λ§ κ°λ₯ 1+4 = 5
2μ μ§μ μ€μ§ 3λ§ κ°λ₯ 2+3 = 5
ν΄λΉ ν©μ΄ xλ³΄λ€ μλ€λ©΄ λ ν° μλ₯Ό λν΄λ΄μΌνκΈ° λλ¬Έμ start μ§μ μ 1 λλ €μ£Όκ³
λ°λλ‘ ν©μ΄ xλ³΄λ€ ν¬λ€λ©΄ ν©μ μ€μ¬μ€μΌ νκΈ° λλ¬Έμ end μ§μ μ 1 μ€μ¬μ€λλ€.
startμ endκ° κ°μμ§κΈ° μ κΉμ§ μ΄λ₯Ό λ°λ³΅νλ©΄ λ΅μ λμΆν μ μμ΅λλ€.
while (start < end){
int sum = sequence[start]+sequence[end];
if(sum == x){ // sumμ΄ xμ κ°μ κ²½μ°
start ++;
end --;
count++;
}
else if(sum < x ){ // sumμ΄ xλ³΄λ€ μμ κ²½μ°
start++;
}
else{ //sumμ΄ xλ³΄λ€ ν° κ²½μ°
end--;
}
}
π» μ½λ
package problem.twopointer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main_3273 {
static int n,x;
static int sequence[];
static int count = 0;
public static void main(String[] args) throws IOException {
input();
solve();
System.out.println(count);
}
public static void solve(){
int start = 0;
int end = n-1;
Arrays.sort(sequence);
while (start < end){
int sum = sequence[start]+sequence[end];
if(sum == x){
start ++;
end --;
count++;
}
else if(sum < x ){
start++;
}
else{
end--;
}
}
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
sequence = new int[n];
String temp[] = br.readLine().split( " ");
for(int i=0; i<n; i++){
sequence[i] = Integer.parseInt(temp[i]);
}
x = Integer.parseInt(br.readLine());
br.close();
}
}