UL :)
UL의 개발 블로그
UL :)
전체 방문자
오늘
어제
  • 분류 전체보기 (220)
    • 일상 (1)
    • 회고록 (7)
    • ChatGPT 아카이빙 (0)
    • PS(Java) (114)
      • 백준 (37)
      • 인프런 강의 문제 (77)
    • Web (69)
      • Spring (18)
      • JPA (7)
      • JSP (9)
      • HTML5 (12)
      • CSS (19)
      • HTTP (0)
      • 보안 (2)
    • Language (5)
      • Java (3)
      • JS (1)
      • Python (1)
    • Git, GitHub (4)
    • Settings (18)
      • IntelliJ (7)
      • Eclipse (2)
      • VSCode (3)
      • Android Studio (1)
      • VMware (2)
      • Mac (0)
    • Etc (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 정렬
  • EntityManagerFactory
  • @Table
  • @ManyToOne
  • ViewName반환
  • HandlerMethodArgumentResolver
  • 요청헤더
  • SEQUENCE 전략
  • JPA
  • consumes
  • 영속성
  • @JoinColumn
  • IDENTITY 전략
  • BOJ
  • 영속성컨텍스트
  • 엔티티 매핑
  • produces
  • argumentresolver
  • HttpMessageConverter
  • 1차 캐시
  • TABLE 전략
  • @Column
  • 백준
  • @RequestParam
  • ReturnValueHandler
  • @GetMapping
  • 동일성보장
  • @Id
  • @PostMapping
  • ORM

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
UL :)

UL의 개발 블로그

PS(Java)/백준

[PS] 백준 11652번 카드

2022. 5. 23. 03:28

문제

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

풀이

다뤄야 할 데이터, N의 최대 개수는 십만개이지만,

카드에 입력될 수 있는 수의 범위는 -2의 62승~ 2의 62승이므로 long타입 배열을 선언한다.

 

카드배열에 수를 입력받은 뒤 가장 많은 개수의 카드의 값을 출력하는 문제이다.

주의할 점은 가장 많은 개수의 카드가 여러종류일 경우 카드의 숫자가 더 작은 것을 출력한다는 점이다.

생각해보면 두 가지 방법이 있다.

 

방법1) Arrays.sort로 오름차순 정렬을 한 뒤 카드 개수를 카운트하기

방법2) HashMap을 사용

 

  • 가장 많은 개수의 카드를 갱신
  • 같은 개수일 경우 카드의 숫자가 더 작은 것으로 갱신

 

나는 방법1을 사용하여 풀어보았다. 마지막에 헷갈리는 부분은 인터넷을 참고했다..

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	
	public static void main(String[] args) throws NumberFormatException, IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());
		long[] card = new long[N];
		
		for(int i=0; i<N; i++) {
			card[i] = Long.parseLong(br.readLine());
		}
		
		Arrays.sort(card);//오름차순 정렬

		int cnt = 1; //카드는 적어도 한장
		int maxCnt=1, maxIdx = 0; //가장 큰 수 저장

		//카드 개수 세기
		for(int i=1; i<N; i++) {

			if(card[i-1] == card[i]) cnt++; //같은 값이면 카운트 증가
			else cnt = 1; //다른 값이면 카운트는 1
			
			//매번 maxCnt와 비교
			if(maxCnt < cnt) { //클 경우에만 max값을 바꾸므로 같은 카운트면 작은 수가 max값이 됨
				maxCnt = cnt;
				maxIdx = i;
			}
		}
		System.out.println(card[maxIdx]);
		
	}
}
저작자표시 비영리 변경금지 (새창열림)

'PS(Java) > 백준' 카테고리의 다른 글

[PS] 백준 10828번 스택  (0) 2022.05.25
[PS] 백준 11004번 K번째 수  (0) 2022.05.24
[PS] 백준 10989번 수 정렬하기 3  (0) 2022.05.21
[PS] 백준 10825번 국영수  (0) 2022.05.20
[PS] 백준 10814번 나이 순 정렬  (0) 2022.05.19
    'PS(Java)/백준' 카테고리의 다른 글
    • [PS] 백준 10828번 스택
    • [PS] 백준 11004번 K번째 수
    • [PS] 백준 10989번 수 정렬하기 3
    • [PS] 백준 10825번 국영수
    UL :)
    UL :)
    백엔드 개발자를 목표로 달리고 있습니다🔥

    티스토리툴바