import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
long count = 1;
if (N==0) System.out.print(1);
else
{
for(int i = 1; i <= N; ++i) count *= i;
System.out.print(count);
}
}
}
설명
이 문제의 N의 최대값은 12이므로 count의 타입을 long이 아닌 int로 해도 상관없다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.print((int)Math.pow(2, N));
}
}
설명
한 층을 내려올 때마다 경우의 수는 2가지 이므로 N층을 내려올 때 경우의 수는 2^N개 이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.print(N * (N - 1));
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int arr[] = new int[N]; //가로수의 개수 입력 받음
int minDivisor = 0;
int sum = 0;
for(int i = 0; i < N; ++i) arr[i] = Integer.parseInt(br.readLine()); //가로수의 위치를 입력받음
for(int i = 1; i < N; ++i)
{
int dis = arr[i] - arr[i-1]; //가로수의 거리 차이
minDivisor = gcd(dis, minDivisor); // 두 가로수의 최대공약수를 저장
}
for(int i = 1; i < N; ++i) sum += ((arr[i] - arr[i-1]) / minDivisor) -1; //'(두 가로수의 거리 / 최대공약수) -1' 를 더함
System.out.println(sum);
}
static int gcd(int a, int b) //유클리드 호제법
{
if(b==0) return a;
else return gcd(b,a%b);
}
}
import lombok.Data;
@Data
public class Member {
private String id;
private String name;
private int age;
}
아웃라인에 자동으로 메소드들이 선언되어 있는 것을 볼 수 있다.
@Data 외에도 아래와 같은 어노테이션을 사용할 수 있다.
tip @Data에 포함되어 있는 @RequiredArgsConstructor는 기본적으로 매개변수가 없는 생성자를 포함시키지만, final 또는 @NonNull이 붙은 필드가 있다면 이 필드만 초기화시키는 생성자를 포함시킨다.
final과 @NonNull의 차이점은 초기화된 final 필드는 변경할 수 없지만(setter가 만들어지지 않음), @NonNull은 null이 아닌 다른 값으로 setter를 통해 변경할 수 있다는 것이다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
HashMap<String, String> m = new HashMap<String, String>();
for (int i = 0; i < N; i++)
{
String name = sc.next();
String log = sc.next();
if (m.containsKey(name)) m.remove(name); //최초 입력이 아니면 나간거
else m.put(name, log); //최초 입력이면 들어온거
}
ArrayList<String> list = new ArrayList<String>(m.keySet()); //Hash맵의 Key들을 ArrayList로 변경
Collections.sort(list, Collections.reverseOrder()); //내림차순으로 정렬
for(int i = 0; i < list.size(); ++i) System.out.println(list.get(i));
}
}
설명
이름과 출입 기록을 받는다.
해당 이름이 해시맵에 없으면 해시맵에 이름과 출입 기록을 추가한다. 해당 이름이 해시맵에 있으면 해시맵에서 해당 이름과 출입 기록을 삭제한다.(최초 입력이 아니면 나간것이기 때문)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
Map<String, Integer> m = new HashMap<>();
String nameArr[] = new String[N + 1];
for(int i = 1; i <= N; ++i)
{
String name = br.readLine();
m.put(name,i);
nameArr[i] = name;
}
for(int i = 0; i < M; ++i)
{
String input = br.readLine();
try //일단 input을 int타입으로 변환 시도
{
int number = Integer.parseInt(input);
//변환 성공시
sb.append(nameArr[number]);
}catch(Exception e){ //변환 실패시
sb.append(m.get(input));
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
설명
해시맵과 포켓몬 이름을 저장할 String타입 배열을 선언한다. String 타입 배열은 인덱스가 1부터 시작하므로 N+1개를 할당해야한다.
포켓몬 이름을 입력받아 해시맵과 배열에 저장한다.
try-catch문으로 검색을 문자로할지 숫자로 할지 정한다.
입력을 int형으로 변환할 수 있으면 배열에서 해당 포켓몬 인덱스를 StringBuilder 버퍼에 저장한다. 입력을 int형으로 변환할 수 없으면 해시맵에서 해당 포켓몬 이름을 StringBuilder 버퍼에 저장한다.